我需要找出我的一个发电机数据库表中最近20秒消耗的峰值读取容量单位。我需要在java中以编程方式找到它,并根据用法设置自动缩放操作。
请您分享一个示例java程序,以查找特定发电机数据库表在过去20秒内消耗的峰值读取容量单位吗?
注意:数据库上的dynamo DB请求有异常峰值,因此需要动态自动缩放。
我试过这个:
result = DYNAMODB_CLIENT.describeTable(recomtableName);
readCapacityUnits = result.getTable()
.getProvisionedThroughput().getReadCapacityUnits();
但是这提供了预配容量,但我需要在最后20秒内消耗的容量。
答案 0 :(得分:0)
您可以使用CloudWatch API getMetricStatistics方法获取所需容量指标的读数。您可以找到需要设置的各种参数的提示here。
答案 1 :(得分:0)
为此,您必须使用Cloudwatch。
GetMetricStatisticsRequest metricStatisticsRequest = new GetMetricStatisticsRequest()
metricStatisticsRequest.setStartTime(startDate)
metricStatisticsRequest.setEndTime(endDate)
metricStatisticsRequest.setNamespace("AWS/DynamoDB")
metricStatisticsRequest.setMetricName('ConsumedWriteCapacityUnits',)
metricStatisticsRequest.setPeriod(60)
metricStatisticsRequest.setStatistics([
'SampleCount',
'Average',
'Sum',
'Minimum',
'Maximum'
])
List<Dimension> dimensions = []
Dimension dimension = new Dimension()
dimension.setName('TableName')
dimension.setValue(dynamoTableHelperService.campaignPkToTableName(campaignPk))
dimensions << dimension
metricStatisticsRequest.setDimensions(dimensions)
client.getMetricStatistics(metricStatisticsRequest)
但是我敢打赌,您的结果会超过5分钟。
实际上,现成的自动升级是使用Cloudwatch。这确实有一个缺点,并且对于某些应用是不可接受的。 当尖峰负荷到达您的表时,它没有足够的容量来响应。保留一些重载是不够的,表开始节流。如果在等待表响应时将记录保留在内存中,它可能只会炸毁内存。另一方面,当尖峰消失时,Cloudwatch通常会在一段时间内做出反应。根据我们的测试,至少需要5分钟。然后逐渐增加容量,在需要时直接达到最大容量
长话短说。我们使用自己的速度计创建了定制解决方案。它所做的是计算需要计数的内容,并相应地更改表的容量。仍然有一个延迟,因为
Dynamo表花费约30秒的时间来更新新的容量详细信息。
在顶部,我们还有一个节流检测器。因此,如果写入/读取请求受到限制,我们将立即相应地提高容量。有时容量级别看起来不错,但由于HOT关键问题而有所节流。