我有一个DynamoDB表,几乎只用于读取。大约50,000,000次读取1次写入,因此对于DAX来说,这似乎是一个很好的用例。
该表中目前只有112个项目,我们仅运行queries
(从不扫描)。当前,我们总共发出3个查询,每次查询都是这3个查询之一,并且查询是从Lambda函数请求的。该表设置为在50到2000之间自动缩放。
我启动了一个具有2个节点的DAX集群,并修改了我们应用程序中的代码以专门使用DAX集群进行读写。这是仪表板中的DAX指标。
我们可以从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个查询)。
我不确定我是否误解了DAX或某些我不知道的情况,但是如果有人可以帮助诊断为什么会发生这种情况,我将不胜感激。
供参考,这里是DAX Docs。
AWS错误
“查询请求计数”显示为〜7k,但是当我单击图表时显示为〜1.5k。我
我猜这是一个错误,但是AWS尚未回答我的错误查询。我暂时认为详细的视图是正确的。
答案 0 :(得分:0)
经过更多调查,我相信这很可能是一个AWS错误。我创建了一个自定义测试来验证这一点,如下所示:
我发现,对于每次两次静态查询都按一次DynamoDB表发出相同的查询时间并没关系。有趣的是,DAX仪表板报告了发出查询的位置,并指出在1000个请求中有999个命中,只有1个未命中。这正是我所期望的,除了查询似乎无论如何都传递给基础表。
我也进行了非常类似的测试,但是我没有使用查询,而是使用了get batch项目,在这种情况下,缓存按预期工作,并且仅在TTL过期时才命中DynamoDB表。
答案 1 :(得分:0)
您看到的唯一解释是,您正在使用一致的读取标志集进行某些查询。这将解释为什么“查询缓存命中”和“查询缓存未命中”指标不累加到“查询请求计数”指标中。因为一致的读数不计入命中或未命中。这也可以解释为什么您仍然看到DynamoDB消耗的容量很高,因为一致的读取会传递到DynamoDB。您能否再次检查是否已将一致读取标志设置为false?您是直接使用DynamoDB客户端,还是使用映射器或文档客户端?
至于“ AWS错误”,我认为您只是在1分钟和5分钟时看到了不同的指标聚合。如果在详细信息视图中将时间间隔设置为5分钟,则应该在仪表板上看到相同的图形。