PostgreSQL Vacuum 会导致缓冲区缓存命中率下降吗?

问题描述 投票:0回答:2

大多数时候,我们的 PostgreSQL(版本 13.8,AWS Aurora,兼容 PostgreSQL)数据库的缓冲区缓存命中率一直在 95~98% 左右。但是,我们一直观察到缓冲区缓存命中率偶尔会下降到 70%-80%。我设法跟踪这些下降到真空活动的发生。每当有真空活动时,我们都会看到缓冲区缓存命中率下降到 70-80%。

我在任何文档中都找不到直接声明“是的,vacuum 活动会逐出缓冲区,因此会导致缓冲区缓存命中率显着下降”。我设法做到的最好的事情是找到关于吸尘器如何工作的解释,并且在伪代码中它说“它将扫描所有页面以获得死元组”我认为这将导致这些页面加载到缓冲区缓存并且用可能不太相关的数据填充它,最终导致命中率下降。

我走的路对吗?

关于 vacuum 活动与缓冲区高速缓存命中率下降之间的这种关系有哪些参考资料?

官方 PostgreSQL 文档中的 Vacuum 文档没有提及它对缓冲区缓存的影响。

postgresql io amazon-rds rdbms amazon-aurora
2个回答
0
投票

当数据库准备好大量未缓存的页面时,缓存命中率会下降。这正是

VACUUM
所做的,所以您观察到的并不奇怪。别担心。

人们往往会高估缓存命中率的相关性。在必要时做一些 I/O 并没有什么坏处。


0
投票

VACUUM 将使用环形缓冲区访问策略,以防止它驱逐很多其他页面,因为它优先驱逐自己最近的页面。但是 VACUUM 本身可能需要访问大量的冷页,这些冷页当然需要被读取。所以 VACUUM 会导致全局命中率下降不是因为它导致其他进程有页面未命中,而是因为 vacuum 本身有页面未命中。

© www.soinside.com 2019 - 2024. All rights reserved.