选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4
历史版本PostgreSQL 9.5 已于 2021 年 2 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本

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会将所请求范围内的块读入数据库缓冲区缓存。

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

F.26.2. 作者

Robert Haas

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。