提问者:小点点

超出 DynamoDB 预置读取容量


com.amazonaws.services.dynotdbv2.model.ProvisiedThroughputExceededException:表的配置配置吞吐量级别超过d。考虑使用UpdateTable API提高配置级别(服务:AmazonDynamoDBv2;状态代码:400;错误代码:ProvisionedThroughputE exceededException;请求ID:KHOG5L1S83VU05CAOEJCCPAUVVV4KQNSO5AEMVJF66Q9ASUAAJG)

我的表格描述如下。

$ 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。

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


共1个答案

匿名用户

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

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

因此,如果您的读取容量为每秒10,000个,并且您的表有10个分区,那么每个分区分配的读取容量为每秒1000个。如果在负载测试中,您访问了同一分区中的键(工作负载分布不均),那么您将看到ProvisionedToverputExceededExceptions。您应该尝试均匀分布分区键空间,以便充分利用预配的吞吐量。

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