9.3 9.4 9.5 9.6 10 11
问题报告 纠错本页面

F.26. pg_prewarm

pg_prewarm 模块提供一种方便的方法把关系数据载入到操作系统缓冲区缓存或者 PostgreSQL缓冲区缓存。

F.26.1. 函数

pg_prewarm(regclass, mode text default 'buffer', fork text default 'main',
           first_block int8 default null,
           last_block int8 default null) RETURNS int8

第一个参数是要预热的关系。第二个参数是要使用的预热方法,下文将会进一步讨论。 第三个参数是要预热的关系分支,通常是main。 第四个参数是要预热的第一个块编号(接受NULL作为零的同义词)。 第五个参数是要预热的最后一个块编号(NULL 表示一直预热到关系中的最后一个块)。返回值是被预热的块数。

有三种可用的预热方法。prefetch会向操作系统发出异步 预取请求,如果支持异步预取,否则抛出一个错误。 read会读取请求的块范围。与prefetch 不同,它是同步的并且在所有平台和构建上都支持,但是可能较慢。 buffer会把请求的块范围读入到数据库缓冲区缓存中。

注意使用任意一种方法尝试预热比可以缓存的数量更多的块 — 使用 prefetch或者read(由 OS)或者使用 buffer(由PostgreSQL ) — 将很可能导致高编号块被读入时把低编号的块从缓冲区中逐出的情况。 被预热的数据也没有缓存逐出的特殊保护,因此其他系统活动可能会在 被预热的块刚刚被读入后很快就将它们逐出。反过来,预热也可能把其他数据逐出缓存。 由于这些原因,预热通常在启动时最有用,那时缓存基本上为空。

F.26.2. 作者

Robert Haas