历史版本。 PostgreSQL 10 已结束支持。 2022-11-10. 请参阅 当前版本手册.
F.28. pg_prewarm #
pg_prewarm 模块提供了一种便捷方式,可将关系数据加载到操作系统缓冲区缓存或 PostgreSQL 缓冲区缓存中。
F.28.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 可作为 0 的同义值);第五个参数是要预热的最后一个块号(NULL 表示一直预热到该关系中的最后一个块)。返回值是已预热的块数。
可用的预热方法有三种。prefetch 会在支持的情况下向操作系统发出异步预取请求,否则就会报错。read 会读取所请求范围内的块;与
prefetch 不同,它是同步的,并且在所有平台和构建方式上都受支持,但可能较慢。buffer 会将所请求范围内的块读入数据库缓冲区缓存。
请注意,无论采用哪种方法,如果试图预热的块数超过可缓存的数量,那么无论是在使用
prefetch 或 read 时由操作系统缓存,还是在
PostgreSQL 使用 buffer 时缓存,都很可能会在读入更高块号的块时逐出较低块号的块。预热后的数据同样不会得到任何特殊的缓存逐出保护,因此其他系统活动可能会在这些新近预热的块被读入后不久就将其逐出;反过来,预热也可能会把其他数据从缓存中逐出。因此,预热通常在启动时最有用,因为此时缓存大多还是空的。
F.28.2. 作者
Robert Haas <rhaas@postgresql.org>