pg_prewarm 预热表插件资料
安装
进入postgresql源码目录
进入其中的contrib目录,可以看到其中有很多插件
安装pg_prewarm插件:
进入pg_prewarm目录;
make
make install
create EXTENSION pg_prewarm;
插件内核是用下面的语句创建了pg_prewarm函数。这个函数是此插件提供的唯一函数:
CREATE FUNCTION pg_prewarm(regclass,
mode text default buffer,
fork text default main,
first_block int8 default null,
last_block int8 default null)
RETURNS int8
AS MODULE_PATHNAME, pg_prewarm
LANGUAGE C
参数含义
regclass:要做prewarm的表名
mode:prewarm模式。prefetch表示异步预取到os cache;read表示同步预取;buffer表示同步读入PG的shared buffer
fork:relation fork的类型。一般用main,其他类型有visibilitymap和fsm
first_block & last_block:开始和结束块号。表的first_block=0,last_block可通过pg_class的relpages字段获得
RETURNS int8:函数返回pg_prewarm处理的block数目(整型)
重启后可以看到多了一个进程postgres: autoprewarm master
使用预热
select pg_prewarm(#tablename, read, main);
select pg_prewarm('#tablename');
参数
SELECT name, setting, unit FROM pg_settings WHERE name LIKE 'pg_prewarm%';
相应的参数设置,pg_prewarm.autoprewarm
表示是否启动预热功能,pg_prewarm.autoprewarm_interval
\df autoprewarm*
autoprewarm_dump_now
表示在服务器启动期间没有配置自动预热功能时,可以使用此命令启动自动预热工作程序。
autoprewarm_start_worker
立马对 autoprewarm. blocks文件进行更新,如果自动预热进程当前没有运行,那么希望在下次重启之后运行它,这样做会很有用。
大表不建议预热,对内存占用较大,建议小表预热