DAX不会减少DynamoDB的读取容量

时间:2018-11-16 09:09:38

标签: amazon-web-services amazon-dynamodb amazon-dax

我有一个DynamoDB表,几乎只用于读取。大约50,000,000次读取1次写入,因此对于DAX来说,这似乎是一个很好的用例。

该表中目前只有112个项目,我们仅运行queries(从不扫描)。当前,我们总共发出3个查询,每次查询都是这3个查询之一,并且查询是从Lambda函数请求的。该表设置为在50到2000之间自动缩放。

enter image description here

我启动了一个具有2个节点的DAX集群,并修改了我们应用程序中的代码以专门使用DA​​X集群进行读写。这是仪表板中的DAX指标。

enter image description here

我们可以从DAX指标中看到正在查询群集。 TTL设置为24小时,因此我期望看到的是,在一天中的大部分时间里,表的读取容量应降至指定的最小阈值,因为所有内容均应来自DAX群集。每天只有一次TTL清除查询时,才应点击Dynamo表。我实际上看到的是Dynamo容量没有变化。不管怎么说,它仍然保持2000的静态配置,消耗了约1000。

我还确认DAX已通过我的日志被击中:

INFO: connected to cluster endpoints: [Backend{addr=/172.31.140.192:8111,healthy=true,active=true,config=ServiceEndpoint{18446744072535932612,null,[-84, 31, -116, -64],8111,REPLICA,us-east-1a,0}}, Backend{addr=/172.31.146.78:8111,healthy=true,active=true,config=ServiceEndpoint{2014424391,null,[-84, 31, -110, 78],8111,LEADER,us-east-1b,1962776298892615}}]

我注意到有两个指标可以确认消耗的阈值仍保持其原始水平。我还可以看到,“查询请求计数”和“查询缓存命中”之间存在巨大差异(有关仪表板错误,请参见本文结尾)。这很奇怪,因为我们正在发出静态查询(每个单个请求相同的3个查询)。

enter image description here

我不确定我是否误解了DAX或某些我不知道的情况,但是如果有人可以帮助诊断为什么会发生这种情况,我将不胜感激。

供参考,这里是DAX Docs


AWS错误

“查询请求计数”显示为〜7k,但是当我单击图表时显示为〜1.5k。我

enter image description here

enter image description here

我猜这是一个错误,但是AWS尚未回答我的错误查询。我暂时认为详细的视图是正确的。

2 个答案:

答案 0 :(得分:0)

经过更多调查,我相信这很可能是一个AWS错误。我创建了一个自定义测试来验证这一点,如下所示:

  1. 我创建了一个新的专用表,其中包含100个控制项,共1KB。
  2. 我启动了一个新的具有2个节点的DAX集群。
  3. 我创建了2个静态查询。一种获得相同的10件物品,第二种获得相同的50件物品。
  4. 我以10秒的间隔在查询循环中运行了1000次。

我发现,对于每次两次静态查询都按一次DynamoDB表发出相同的查询时间并没关系。有趣的是,DAX仪表板报告了发出查询的位置,并指出在1000个请求中有999个命中,只有1个未命中。这正是我所期望的,除了查询似乎无论如何都传递给基础表。

我也进行了非常类似的测试,但是我没有使用查询,而是使用了get batch项目,在这种情况下,缓存按预期工作,并且仅在TTL过期时才命中DynamoDB表。

答案 1 :(得分:0)

您看到的唯一解释是,您正在使用一致的读取标志集进行某些查询。这将解释为什么“查询缓存命中”和“查询缓存未命中”指标不累加到“查询请求计数”指标中。因为一致的读数不计入命中或未命中。这也可以解释为什么您仍然看到DynamoDB消耗的容量很高,因为一致的读取会传递到DynamoDB。您能否再次检查是否已将一致读取标志设置为false?您是直接使用DynamoDB客户端,还是使用映射器或文档客户端?

至于“ AWS错误”,我认为您只是在1分钟和5分钟时看到了不同的指标聚合。如果在详细信息视图中将时间间隔设置为5分钟,则应该在仪表板上看到相同的图形。