1 pgfincore插件介绍
1.1 pgfincore 核心功能
-
操作系统缓存管理
- 直接操作表/索引在操作系统缓存中的驻留状态
- 比
pg_prewarm更细粒度控制(支持WILLNEED/DONTNEED等策略)
-
缓存状态监控
- 查看文件在系统缓存中的分布情况
- 统计缓存页面的命中率
-
跨服务器同步
- 生成缓存预热脚本,用于备库快速加载热数据
2 下载与安装
2.1 下载地址
2.1.1 pg官网
https://ftp.postgresql.org/pub/repos/yum/15/redhat/rhel-7.9-x86_64/

2.1.2 github
GitHub: https://github.com/klando/pgfincore/
国内gitee也有镜像: https://gitee.com/mirrors/PgFincore
2.2 安装
2.2.1 yum安装
yum -y install pgfincore_15-1.3.1-1PGDG.rhel7.x86_64.rpm

2.2.2 数据库安装
select * from pg_available_extensions where name='pgfincore';

SET SESSION search_path TO ods;
CREATE EXTENSION IF NOT EXISTS pgfincore;

3 pgfincore插件使用详解
3.1 查看OS缓存整体情况
select * from pgsysconf();
select * from pgsysconf_pretty();

3.2 查看表的缓存情况
select * from pgfincore('ods_goods_goods_sku_rt');
select * from pgfincore('idx_sku_rt_time_id2');

3.3 缓存表活索引到OS中
可以把表或者索引预读到Pagecache ,注意如果是分区表,一定要用分区,不要使用表名,pgfincore不支持自动识别分区
通过给表或者索引的文件设置 WILLNEED flag,让操作系统尽可能的加载数据文件块到PageCache。
select * from pgfincore('ods_goods_goods_sku_rt');
select * from pgfadvise_willneed('ods_goods_goods_sku_rt');

3.4 删除表活索引再OS中的缓存
select * from pgfincore('ods_goods_goods_sku_rt');
select * from pgfadvise_dontneed('ods_goods_goods_sku_rt');

3.5 查看所有表的OS缓存情况
SET SESSION search_path TO ods;
SELECT
c.relname AS 对象名,
c.relkind AS 类型, -- 'r'=表, 'i'=索引
SUM(f.pages_mem) AS 缓存页数,
(SUM(f.pages_mem) * 4096) / 1024 / 1024 AS 缓存大小_MB,
(SUM(f.pages_mem) * 100.0 / SUM(f.rel_os_pages))::numeric(5,2) AS 缓存率
FROM
pg_class c
JOIN
pgfincore(c.oid) f ON true
WHERE
c.relkind IN ('r', 'i') -- 过滤表和索引
AND c.relnamespace NOT IN ('pg_catalog'::regnamespace, 'information_schema'::regnamespace) -- 排除系统表
GROUP BY
c.relname, c.relkind
ORDER BY
缓存大小_MB DESC;

posted on
浙公网安备 33010602011771号