网易首页 > 网易号 > 正文 申请入驻

(文档)第132讲:物化视图管理利器 ——pg_repack插件

0
分享至

pg_repack概述

pg_repack 是 PostgreSQL 数据库的一个扩展插件,可以对表的物理存储进行在线"重新包装",回收碎片空间,有效解决因对表大量UPDATE、DELETE 等操作引起的空间膨胀问题。

pg_repack 获取排他锁的时间很短,多数时间不阻塞读写,相比 CLUSTER 或 VACUUM FULL 操作更加轻量化。它通过创建临时表和触发器来捕获重组期间的增量变更,实现几乎零停机的表重组。

pg_repack工作原理

pg_repack 通过创建临时表、触发器捕获增量变更的方式实现在线重组,主要步骤如下:

1、创建与原表结构相同的新表(临时表)

2、在原表上创建触发器,捕获重组期间的 INSERT/UPDATE/DELETE 操作

3、将原表数据复制到新表(可按指定列排序,类似 CLUSTER)

4、在新表上并行创建索引

5、将重组期间捕获的增量变更应用到新表

6、短暂获取排他锁,交换新旧表并删除旧表,完成重组

pg_repack命令选项

选项

功能说明

-t, --table

指定要重组的表名,仅对该表执行在线重组

-i, --index

只重组指定的索引,无需重组整张表

-j, --jobs

指定并行工作进程数,用于加速索引创建

-n, --no-order

不按指定列排序,仅消除碎片(无主键表可用)

-T, --wait-timeout=SECS

等待超时,会kill引起冲突的相关后端进程

-D, --no-kill-backend

当超时发生,不中断引起冲突的相关后端进程

pg_repack 命令选项

选项

功能说明

-o, --order-by

按指定列对数据进行物理排序重组

-d, --dbname

指定要连接的数据库名

--dry-run

试运行,仅检查条件不实际执行重组

-s, --schema

重组指定 schema 下的所有表

pg_repack安装

1、下载

https://github.com/reorg/pg_repack

2、编译安装

cd pg_repack

make

make install

3、修改配置文件 postgresql.conf

shared_preload_libraries = 'pg_repack'

4、安装插件

CREATE EXTENSION IF NOT EXISTS pg_repack;

pg_repack使用技巧

消除表碎片(在线重组表)

1、查看表的碎片情况

SELECT schemaname, relname, n_dead_tup, n_live_tup,

round(n_dead_tup::numeric/n_live_tup*100,2) AS bloat_pct

FROM pg_stat_user_tables where relname='pgbench_accounts' ORDER BY bloat_pct DESC;

2、执行 pg_repack 重组表

pg_repack -d pg_bench -t pgbench_accounts

3、验证重组后的表大小

SELECT pg_size_pretty(pg_relation_size('pgbench_accounts'));

注意:pg_repack 要求目标表必须有主键或唯一非空索引,否则无法执行在线重组。

重组期间会创建临时表和触发器,请确保有足够的磁盘空间(约为表大小)。

VACUUM FULL VS pg_repack

传统VACUUM FULL方式

1、对表执行 VACUUM FULL

test=# VACUUM FULL pgbench_accounts;

2、VACUUM FULL 期间全程持有排他锁

阻塞所有读写操作,业务停摆

Time: 12580.456 ms

3、查看表大小

SELECT pg_size_pretty(pg_relation_size('pgbench_accounts'));

VACUUM FULL VS pg_repack

pg_repack在线重组

1、使用 pg_repack 重组表

pg_repack -d pg_bench -t pgbench_accounts

2、重组期间不阻塞读写

仅在开始和结束阶段短暂加锁

INFO: repacking table "pgbench_accounts"

Time: 3560.123 ms

3、查看重组后大小

SELECT pg_size_pretty(pg_relation_size('pgbench_accounts'));

pg_repack与索引

pg_repack与索引的关系

pg_repack 不仅可以重组表,还可以单独重组索引。当索引因大量 DML 操作产生膨胀时,可以使用 pg_repack 重建索引,而无需重组整张表。

重组索引时使用 -i 参数指定索引名。pg_repack 会创建新的索引,构建完成后替换旧索引,整个过程对业务影响极小。

对于大型表,推荐使用 -j 参数开启并行工作进程,加快索引重建速度。同时可以使用 --dry-run 先进行试运行,检查重组条件是否满足。

pg_repack按列排序重组

按列排序重组的优势

pg_repack 支持在重组时按照指定列对数据进行物理排序,效果类似于 CLUSTER 命令,但不需要长时间持有排他锁。

使用 --order-by 指定排序列,可以提升范围查询的 I/O 性能;使用 --no-order 则仅消除碎片而不改变数据顺序,速度更快。

对于有主键或唯一索引的表,pg_repack 默认会按该列排序。也可以通过 -o 参数自定义排序列,使热点查询的数据在磁盘上连续分布。

pg_repack按列排序重组

按列排序重组演示

1、查看重组前查询性能

test=# EXPLAIN ANALYZE SELECT * FROM orders

WHERE order_date BETWEEN '2025-01-01' AND '2025-03-31';

2、按日期列重组

pg_repack -d testdb -t orders --order-by "order_date"

INFO: repacking table "orders" USING order by "order_date"

Time: 4520.678 ms

3、查看重组后查询性能

test=# EXPLAIN ANALYZE SELECT * FROM orders

WHERE order_date BETWEEN '2025-01-01' AND '2025-03-31';

pg_repack按列排序重组

按列排序重组效果

4、对比重组前后执行计划

重组前:Seq Scan on orders (cost=0.00..154.30 rows=5000)

重组后:Index Scan on orders (cost=0.42..8.45 rows=5000)

查询性能显著提升

Time: 0.087 ms

通过按查询条件列进行物理排序,使得范围扫描时数据在磁盘上连续分布,大幅减少随机 I/O,提升查询效率。

pg_repack注意事项

pg_repack注意事项

1、目标表必须有主键或唯一非空索引

否则需使用 --no-order 参数重组

2、确保足够的磁盘空间

重组期间会创建临时表,需要约等于表大小的额外空间

3、重组期间 DML 操作会被触发器捕获

高并发写入场景下会有额外性能开销

4、重组大表时建议使用 -j 并行参数

加快数据复制和索引重建速度

pg_repack所支持的特性

pg_repack支持的特性

特性描述表重组

在线重组表,消除碎片,多数时间不阻塞读写

索引重组

单独重组指定索引,无需重组整张表

按列排序

支持 --order-by 按指定列物理排序,提升范围查询性能

并行处理

支持 -j 多进程并行构建索引,加速重组

按 Schema 重组

支持 -s 重组整个 schema 下所有表,批量处理

试运行

支持 --dry-run 检查条件不实际执行重组

PostgreSQL中文社区认证

与工信部人才交流中心合作,推出PostgreSQL初/中/高级证书,证书中明确指定适用于信息技术应用创新人才岗位能力评定要求。



特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
刚上市的梭子蟹很多人吃了拉肚子?问题出在很多人不知道的细节上

刚上市的梭子蟹很多人吃了拉肚子?问题出在很多人不知道的细节上

白米饭怎么吃
2026-08-17 21:35:17
三女非亲生案将开庭!女方仍在四处旅游,大女儿生父已被扒出!

三女非亲生案将开庭!女方仍在四处旅游,大女儿生父已被扒出!

娱乐洞察点点
2026-08-17 15:24:56
湖人彻底易主!巴斯家族把剩余股权出售给新老板 珍妮不再执掌湖人

湖人彻底易主!巴斯家族把剩余股权出售给新老板 珍妮不再执掌湖人

追球者
2026-08-18 03:54:10
10万亿窟窿!比恒大更坑的民企来了,曾力压许家印,位居第一

10万亿窟窿!比恒大更坑的民企来了,曾力压许家印,位居第一

孤单是寂寞的毒
2026-03-04 15:38:03
从松散低强度到一天两练!穆里尼奥给皇马开出力度空前的改革

从松散低强度到一天两练!穆里尼奥给皇马开出力度空前的改革

生活新鲜市
2026-08-18 03:53:16
狂胜23分!张帆轰26+3+3带队夺冠,新星14+6+10,张庆鹏尴尬了!

狂胜23分!张帆轰26+3+3带队夺冠,新星14+6+10,张庆鹏尴尬了!

老牛体育解说
2026-08-17 18:02:53
局势生变!中方突然派人赶赴伊朗,要谈件大事,事关全球军工命脉

局势生变!中方突然派人赶赴伊朗,要谈件大事,事关全球军工命脉

海幻梦家
2026-08-17 10:34:21
穆里尼奥看走眼!皇马头号核心彻底摆烂!高薪巨星全程隐身

穆里尼奥看走眼!皇马头号核心彻底摆烂!高薪巨星全程隐身

澜归序
2026-08-17 07:54:20
电讯报:马雷斯卡冒名顶替综合征,他无法证明自己能接班瓜帅

电讯报:马雷斯卡冒名顶替综合征,他无法证明自己能接班瓜帅

懂球帝
2026-08-17 15:34:12
36岁《英雄》女星海顿·潘妮蒂尔公寓身亡,警方称无他杀迹象但死因成谜

36岁《英雄》女星海顿·潘妮蒂尔公寓身亡,警方称无他杀迹象但死因成谜

赴一场山海啊
2026-08-18 01:12:21
完美人设崩塌:90%的人厌倦了假装一切都很好

完美人设崩塌:90%的人厌倦了假装一切都很好

心事寄山海
2026-08-17 02:56:14
四川老太痴呆18年,突然说起手里有股票,孙子查账户时吓一跳

四川老太痴呆18年,突然说起手里有股票,孙子查账户时吓一跳

温情邮局
2025-06-05 14:20:38
不再替全球培养对手!三条铁令落地,方博梁靖崑被逼入绝境

不再替全球培养对手!三条铁令落地,方博梁靖崑被逼入绝境

策前论
2026-08-17 14:25:56
全球乱成一锅粥,俄罗斯拖住欧洲,伊朗拖住美国,中国得到什么?

全球乱成一锅粥,俄罗斯拖住欧洲,伊朗拖住美国,中国得到什么?

墨兰史书
2026-08-17 20:50:03
单注1000万!双色球2026094期三地分奖江苏独揽2注142注二等奖爆21万

单注1000万!双色球2026094期三地分奖江苏独揽2注142注二等奖爆21万

会飞的小小鱼654
2026-08-18 00:57:11
湖人前老板沃尔特接受欺诈调查!美媒推测卖队目的:释放抵押资产

湖人前老板沃尔特接受欺诈调查!美媒推测卖队目的:释放抵押资产

罗说NBA
2026-08-17 09:13:46
不出意外,下半年开始,快递、外卖、网约车将迎来行业新一轮洗牌

不出意外,下半年开始,快递、外卖、网约车将迎来行业新一轮洗牌

民生格物
2026-08-17 14:38:11
年入200万网红一夜清零!南通焊武帝重返小厂焊活

年入200万网红一夜清零!南通焊武帝重返小厂焊活

手工制作阿歼
2026-08-18 00:37:52
移民问题:意大利关停清真寺,希腊 60 座也被查,欧洲多国要集体变天?

移民问题:意大利关停清真寺,希腊 60 座也被查,欧洲多国要集体变天?

怪味历史连连看
2026-08-18 05:35:11
军事 | 美军航母会不会出现“返祖”现象?

军事 | 美军航母会不会出现“返祖”现象?

新民周刊
2026-08-17 09:10:55
2026-08-18 06:11:00
CUUG
CUUG
北京神脑资讯技术有限公司
736文章数 18关注度
往期回顾 全部

科技要闻

马斯克600亿美元买条近路

头条要闻

因老板娘一句随口交代 打工走失男子独守深山老宅25年

头条要闻

因老板娘一句随口交代 打工走失男子独守深山老宅25年

体育要闻

C罗:可能是生涯最后一年 未来都规划好了

娱乐要闻

立案风波席卷德云社多场巡演叫停!

财经要闻

爱丽家居跨界玩存储:溢价背后藏着机密案

汽车要闻

2027款艾瑞泽8 PRO 年轻人的务实之选

态度原创

数码
游戏
旅游
公开课
军事航空

数码要闻

红魔官宣游戏平板5 Pro主流FPS游戏165Hz高刷全面上线

畅销榜TOP5,叠纸《恋与深空》“活过来了”?

旅游要闻

这个夏天 年轻人把城市变成游乐场

公开课

李玫瑾:为什么性格比能力更重要?

军事要闻

俄遭大规模袭击 24小时内击落1478架乌无人机刷新纪录

无障碍浏览 进入关怀版