PostgreSQL 9.4.4 中文手册
上一页 | 上一级 | 附录 F. 额外提供的模块 | 下一页

# F.27. pg_prewarm

`pg_prewarm`模块提供了一个方便的方式加载关系数据到操作系统缓冲区缓存或 PostgreSQL缓冲区缓存。

## F.27.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.27.2. 作者

Robert Haas `<rhaas@postgresql.org>`

上一页 | 起始页 | 下一页
pg_freespacemap | 上一级 | pgrowlocks