AnolisOS 8.8 PostgreSQL pg_prewarm 预热数据

PostgreSQL 预热数据

PostgreSQL 数据库的 pg_prewarm 模块提供一种方法把关系数据载入到操作系统缓冲区或者 PostgreSQL 缓冲区。可以使用 pg_prewarm 函数手工执行预热,或者通过在配置文件中的 shared_preload_libraries 中配置 pg_prewarm 来自动执行预热。在后一种情况中,系统将运行一个后台工作者,它会周期性地把共享内存中的内容记录在一个名为 autoprewarm.blocks 的文件中,并且在重新启动后用两个后台工作者重新载入那些块。

pg_prewarm(regclass, mode text default 'buffer', fork text default 'main',first_block int8 default null,last_block int8 default null) RETURNS int8
第一个参数是要预热的关系对象。
第二个参数是要使用的预热方法。
第三个参数是要被预热的关系分叉,通常是 main。
第四个参数是要预热的第一个块号。
第五个参数是要预热的最后一个块号。
返回值是被预热的块数。

有三种可用的预热方法。
prefetch 会向操作系统发出异步预取请求,不支持异步预取则抛出一个错误。
read 会读取要求范围的块。与 prefetch 不同,它是同步的并且在所有平台上都被支持,但是可能较慢。
buffer 会把要求范围的块读入数据库的缓冲区。

注意被预热的数据不享受对缓冲区替换的特别保护,因此其他系统活动可能会在刚刚被预热的块被读入后很快就将它们逐出。反过来,预热也可能把其他数据逐出缓存。由于这些原因,预热通常在启动时最有用,因为那时缓冲大部分都为空。

使用案例:假设我们要预热对象 sys_users 表
安装插件
create extension pg_prewarm;
create extension pg_buffercache;

先查看缓冲器该对象预热的块数
select count(*) from pg_buffercache where relfilenode = (select relfilenode from pg_class where relname = 'sys_users');

进行数据访问
select * from sys_users where user_id = 1000286;

再次观察该对象预热的块数
select count(*) from pg_buffercache where relfilenode = (select relfilenode from pg_class where relname = 'sys_users');

进行对象的数据预热
select pg_prewarm('sys_users','buffer','main');

再次观察对象预热的块数
select count(*) from pg_buffercache where relfilenode = (select relfilenode from pg_class where relname = 'vaa11');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值