2016-05-17 19 views
0

enter image description here我負載以每秒3000個請求測試服務。每個請求都從DynamoDB表中提取數據。該表具有每秒10,000次讀取的規定讀取容量。不過,我收到以下異常:DynamoDB ProvisionedReadCapacity超過

com.amazonaws.services.dynamodbv2.model.ProvisionedThroughputExceededException: The level of configured provisioned throughput for the table was exceede d. Consider increasing your provisioning level with the UpdateTable API (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ProvisionedThroughputE xceededException; Request ID: KHOG5L1S83VU05CAOEJCCPAUFVVV4KQNSO5AEMVJF66Q9ASUAAJG)

我的表說明如下。

$ aws dynamodb describe-table --table-name my_table 
{ 
"Table": { 
    "TableArn": "arn:aws:dynamodb:us-east-1:188456577:table/my_table", 
    "AttributeDefinitions": [ 
     { 
      "AttributeName": "username", 
      "AttributeType": "S" 
     } 
    ], 
    "ProvisionedThroughput": { 
     "NumberOfDecreasesToday": 0, 
     "WriteCapacityUnits": 10000, 
     "LastIncreaseDateTime": 1462386432.633, 
     "ReadCapacityUnits": 10000 
    }, 
    "TableSizeBytes": 289776, 
    "TableName": "my_table", 
    "TableStatus": "ACTIVE", 
    "KeySchema": [ 
     { 
      "KeyType": "HASH", 
      "AttributeName": "username" 
     } 
    ], 
    "ItemCount": 81, 
    "CreationDateTime": 1458249331.208 
    } 
} 

可以看出,表的讀寫容量單位都設置爲10,000。

我正在監控豆杆服務的health,同時負載測試正在進行中,請求數平均每秒約爲3K。我不明白爲什麼吞吐量超過了。該表還應該每秒獲得3,000個請求。

+0

什麼的[CloudWatch的指標(http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/MonitoringDynamoDB.html#dynamodb-metrics)說明了什麼? –

+0

@ Michael-sqlbot我已將cloudwatch指標添加到帖子中。它表明消耗的容量大約爲3,000個單位,這是我的預期。但是,我正在接受這些例外。 – Nik

+0

我建議深入到AWS支持 – Shibashis

回答

1

DynamoDB不節制對整個表容量。從文檔:

與表相關的供應吞吐量也分爲 均勻的分區中,以跨分區不共享配置的吞吐量 的。

因此,如果您的讀取容量爲每秒10,000,並且您的表有10個分區,那麼將爲每個分區分配一個每秒讀取1000次的讀取容量。如果在您的負載測試中,您在同一個分區中鍵入密鑰(工作負載分佈不均勻),那麼您將看到ProvisionedThroughputExceededExceptions。您應該嘗試對分區密鑰空間進行均勻分配,以便充分利用預配置的吞吐量。

瞭解更多關於這個話題here

+0

這解釋了爲什麼我會看到例外情況,即使我明顯處於供應能力範圍內。對於來自Load Generator的每個請求,我確實使用了相同的URL。因此,每個請求都爲同一個密鑰提供記錄。處理該密鑰的分區正在獲取所有流量。我現在嘗試在負載測試期間改變密鑰。 – Nik