pg_pathman内置监控视图清单:pathman_partition_list等4大视图一键掌握分区状态
pg_pathman内置监控视图清单:pathman_partition_list等4大视图一键掌握分区状态
【免费下载链接】pg_pathmanPartitioning tool for PostgreSQL项目地址: https://gitcode.com/gh_mirrors/pg/pg_pathman
pg_pathman是 PostgreSQL 的开源分区工具扩展(Partitioning tool for PostgreSQL),它为 PostgreSQL 提供 HASH 和 RANGE 两种优化的分区机制。装完扩展后,很多新手都会问:怎么快速查看分区有没有建好?后台迁移任务跑到哪了?共享内存缓存占了多少?其实 pg_pathman 已经内置了一套"监控面板"——pathman_partition_list等 4 大监控视图(表),一条 SELECT 就能一键掌握整个分区状态,本文带你逐个认识它们。
4大监控入口速览表 📋
安装 pg_pathman 扩展后(对象通常位于pathmanschema 下),以下监控入口即自动创建,全部只读、随时可查:
| 监控对象 | 类型 | 核心用途 |
|---|---|---|
pathman_partition_list | 视图 | 列出所有父表、分区、分区类型与范围边界 |
pathman_concurrent_part_tasks | 视图 | 查看正在运行的后台分区迁移任务 |
pathman_cache_stats | 视图 | 查看各共享内存缓存的内存占用 |
pathman_config(含pathman_config_params) | 配置表 | 查看分区键、分区类型及自动分区等参数 |
这些对象的定义可以在仓库根目录的init.sql中找到,官方说明见README.md的 "Views and tables" 章节。
视图一:pathman_partition_list 分区清单总览
这是使用频率最高的视图,它把"哪张表被分区了、分了哪些子分区、每个分区覆盖什么范围"一次性展示出来。
字段说明:
parent:父表(被分区的表)partition:具体的分区子表parttype:分区类型(1 = HASH,2 = RANGE)expr:分区键表达式range_min/range_max:RANGE 分区的边界值(HASH 分区为 NULL)
实用场景:给分区"体检"
SELECT parent, partition, expr, range_min, range_max FROM pathman.pathman_partition_list WHERE parent = 'test.range_rel'::regclass;配合drop_range_partition()还能批量下线旧分区:查出range_min小于某个阈值的分区并整体删除,比手写DROP TABLE更安全。测试用例可参考sql/pathman_basic.sql中对pathman_partition_list的大量查询示例。
视图二:pathman_concurrent_part_tasks 后台任务实时监控
对大表执行partition_table_concurrently()时,pg_pathman 会启动后台 Worker 分批搬移数据。这个视图让你随时掌握迁移进度:
userid:发起任务的用户pid:工作进程号relid:正在迁移的表processed:已处理的行数status:当前状态(如working)
SELECT * FROM pathman.pathman_concurrent_part_tasks;官方文档中给出的典型输出:
userid | pid | dbid | relid | processed | status --------+------+-------+-------+-----------+--------- dmitry | 7367 | 16384 | test | 472000 | workingprocessed数字不断增长,说明任务健康;长时间不动则要检查是否有长事务锁住了数据行。完整示例见sql/pathman_bgw.sql。
视图三:pathman_cache_stats 共享内存占用检查
pg_pathman 的核心性能秘诀是把分区信息缓存在共享内存中,用于加速查询规划。这个视图展示每个缓存的内存消耗:
context:缓存场景名称size:缓存总容量used:已使用量entries:条目数
SELECT context, entries FROM pathman.pathman_cache_stats ORDER BY entries DESC;如果分区数量非常多,可借此确认缓存是否正常装载;size由 GUC 参数控制,调优时可对照此视图验证效果。相关测试见sql/pathman_calamity.sql。
监控表四:pathman_config 分区配置中心
严格来说这是一张配置表而非视图,但它是排查分区问题的"总开关"。每张被分区的表在这里占一行:
partrel:父表expr:分区表达式parttype:1 = HASH,2 = RANGErange_interval:自动创建分区所用的默认区间
配套的pathman_config_params表则记录可选参数:enable_parent(父表是否参与计划)、auto(是否自动建分区)、init_callback(建分区回调)、spawn_using_bgw(是否用后台 Worker 建分区)。
SELECT partrel, expr, parttype, range_interval FROM pathman.pathman_config;💡小贴士:怀疑自动分区没生效?先查
pathman_config_params.auto是否为TRUE;怀疑父表空扫拖慢查询?看enable_parent是否为FALSE。
日常巡检清单:3条SQL搞定分区运维 ✅
把下面三条查询存成巡检脚本,定期执行即可:
- 分区完整性:
SELECT count(*) FROM pathman.pathman_partition_list WHERE parent = 'xxx'::regclass;—— 确认分区数量符合预期 - 迁移进度:
SELECT relid, processed, status FROM pathman.pathman_concurrent_part_tasks;—— 确认后台任务在推进 - 配置核对:
SELECT * FROM pathman.pathman_config;—— 确认分区键和区间无误
另外,tests/update/dump_pathman_objects.sql中还提供了导出全部 pg_pathman 对象(含上述视图)的脚本,方便升级前后做结构对比。
常见问题 FAQ
Q1:视图为什么查不到数据?确认扩展已创建且查询时带上了正确的 schema(如pathman.pathman_partition_list),并且确实调用过create_range_partitions()/create_hash_partitions()建过分区。
Q2:parttype 的 1 和 2 分别代表什么?1 表示 HASH 分区,2 表示 RANGE 分区。该约束定义在init.sql的pathman_config表结构中(parttype IN (1, 2))。
Q3:这些视图有性能开销吗?基本都是元数据查询,代价极低;pathman_cache_stats只读取共享内存统计,可放心纳入监控采集。
Q4:pg_pathman 还会继续发展吗?项目官方声明已停止新功能开发,但仍在维护已支持版本(PostgreSQL 11~15)的 bug 修复。新项目也建议评估 PostgreSQL 原生分区,不过对于已在使用 pg_pathman 的存量系统,掌握这套内置监控视图仍是日常运维的基本功。
【免费下载链接】pg_pathmanPartitioning tool for PostgreSQL项目地址: https://gitcode.com/gh_mirrors/pg/pg_pathman
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
