关于缓存命中率的问题。

0

【以下的问题经过翻译处理】 在调查一个DocumentDB实例中的问题,这导致CPU使用不稳定的波动。我的猜想是我正在处理低效的查询。我试图理解BufferCacheHitRatio指标的作用,因为我的值从未低于99.9%。在查询数据之前,数据库是否仍然需要处理查询才能查找其缓冲区高速缓存中的数据?

其他可能重要的信息:我有时看到DatabaseCursorsTimedOut值超过0,还有DB实例层级时偶尔达到最大光标允许的次数。

profile picture
专家
已提问 8 个月前40 查看次数
1 回答
0

【以下的回答经过翻译处理】 理想情况下,磁盘读取速度比内存慢。索引页面根据运行在数据库上的查询进行分页并存储在内存中。当您首次启动集群时,其缓冲区缓存为空,随着您的工作负载针对数据库进行查询,它将填充页面。如果索引大小大于内存量(索引无法放入内存中),则数据库必须清除并从磁盘中读取以迭代索引(数据页也是如此)。理想情况下,您希望实例的RAM足够大,以便数据页和索引页面都能放入内存中。

“在查找缓冲区中的数据之前,数据库是否仍然必须处理查询?”:

查询仍需要处理(查询计划),但结果的获取取决于页面的位置(内存 vs 存储),查询的处理方式取决于查询的结构和类型。

通常,缓冲区缓存命中率的值应尽可能高(接近100%),因为从工作集内存中读取数据比从存储卷中读取数据更快且更具成本效益。如果您的索引无法放入内存中,您将看到较低的BufferCacheHitRatio。连续从磁盘读取会产生额外的I/O成本,不如从内存中读取效果好。您可以监视VolumeReadIOPS来确定磁盘是否被更多地使用。

一个重要的规则是,如果您注意到磁盘IOPS增加+成本增加+BufferCacheHitRatio和IndexBufferCacheHitRatio减少,那么您最好不要使用缓冲区。

由于CPU使用率较高且BufferCacheHitRatio未降至99.99%以下,为了确定是否是查询导致了CPU增加,我建议在集群上启用性能洞察[1],这将使您能够监视查询所使用的虚拟CPU。分析器日志还将有助于确定查询的执行时间[2]。我还添加了[3],将有助于确定CPU增加的根本原因。

参考: [1] Performance insights Documentdb: https://docs.aws.amazon.com/documentdb/latest/developerguide/performance-insights.html

[2] Profiling Documentdb: https://docs.aws.amazon.com/documentdb/latest/developerguide/profiling.html

[3] Determining high CPU documentdb: https://docs.amazonaws.cn/en_us/documentdb/latest/developerguide/user_diagnostics.html#user_diagnostics-cpu_utilization

profile picture
专家
已回答 8 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则

相关内容