↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4
历史版本。 PostgreSQL 9.5 已结束支持。 2021-02-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可作为 0 的同义值);第五个参数是要预热的最后一个块号(NULL表示一直预热到该关系中的最后一个块)。返回值是已预热的块数。

可用的预热方法有三种。prefetch会在支持的情况下向操作系统发出异步预取请求,否则就会报错。read会读取所请求范围内的块;与 prefetch不同,它是同步的,并且在所有平台和构建方式上都受支持,但可能较慢。buffer会将所请求范围内的块读入数据库缓冲区缓存。

请注意,无论采用哪种方法,如果试图预热的块数超过可缓存的数量,那么无论是在使用 prefetch或read时由操作系统缓存,还是在 PostgreSQL使用buffer时缓存,都很可能会在读入更高块号的块时逐出较低块号的块。预热后的数据同样不会得到任何特殊的缓存逐出保护,因此其他系统活动可能会在这些新近预热的块被读入后不久就将其逐出;反过来,预热也可能会把其他数据从缓存中逐出。因此,预热通常在启动时最有用,因为此时缓存大多还是空的。

F.26.2. 作者

Robert Haas

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.