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读取请求的块范围到数据库缓冲区缓存中。

请注意,使用任意的这些方法,尝试预热比缓冲区可以缓存的更多的块 — 在使用prefetchread时通过OS, 或在使用buffer时通过PostgreSQL — 将有可能导致低编号的块被赶走,因为读取进来了高编号的块。 预热的数据还喜欢不特别保护缓存驱逐,所以对于其他系统来说, 活动有可能在新预热的块被读取不久之后就驱逐它们;相反的, 预热也可能从缓存中驱逐其它数据。因为这些原因,预热通常在启动、缓存基本上是空的时最有用。

F.27.2. 作者

Robert Haas