DynamoDB 预配置读取容量超出

Nik*_*Nik 3 throughput amazon-dynamodb amazon-elastic-beanstalk

在此输入图像描述我正在对每秒 3000 个请求的服务进行负载测试。每个请求都会从 DynamoDB 表中获取数据。该表的预置读取容量为每秒 10,000 次读取。但是,我收到以下异常:

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
    }
}
Run Code Online (Sandbox Code Playgroud)

可以看到,表的读写容量单位都设置为10000。

health当负载测试正在进行时,我正在监视beanstalk 服务,请求数量确实平均每秒大约 3K。我不明白为什么超出了吞吐量。该表还应该每秒收到 3,000 个请求。

Roh*_*nga 5

DynamoDB 不会限制整个表的容量。从文档中:

与表关联的预置吞吐量也在分区之间平均分配,而跨分区不共享预置吞吐量。

因此,如果您的读取容量为每秒 10,000 次,并且您的表有 10 个分区,那么每个分区分配的读取容量为每秒 1000 次读取。如果在负载测试中您按下同一分区中的按键(工作负载分布不均匀),那么您将看到 ProvisionedThroughputExceededExceptions。您应该尝试均匀分布分区键空间,以便获得最大的预配置吞吐量。

请在此处阅读有关此主题的更多信息。