Postgres pg_prewarm 将表保留在缓冲区中,在删除表后给出 0

问题描述

我按照本教程中概述的步骤使用 pg_prewarm 扩展来预热 Postgresql 中的缓冲区缓存:

https://ismailyenigul.medium.com/pg-prewarm-extention-to-pre-warming-the-buffer-cache-in-postgresql-7e033b9a386d

我第一次运行它时,结果是 1

mydb=> SELECT pg_prewarm('useraccount');
 pg_prewarm 
------------
          1

在那之后,我不得不删除表并重新创建它。从那以后,当我运行相同的命令时,我总是得到 0 作为结果。我不确定这是预期的还是我遗漏了什么?

mydb=> SELECT pg_prewarm('useraccount');
 pg_prewarm 
------------
          0

解决方法

contrib/pg_prewarm/pg_prewarm.c 中的函数注释说:

 * [...] The
 * return value is the number of blocks successfully prewarmed.

所以第一次,表中有 1 个块。删除并重新创建表后,它是空的,因此缓存了0个块。