pg_squeeze
从关系中删除未使用空间
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
pg_squeeze | 1.9.1 | ADMIN | BSD 2-Clause | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 5040 | pg_squeeze | 否 | 是 | 是 | 是 | 否 | 否 | squeeze |
| 相关扩展 | pg_repack pgfincore pg_prewarm pgstattuple pg_cooldown pgcozy amcheck pageinspect |
|---|
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PGDG | 1.9.1 | 1817161514 | pg_squeeze | - |
| RPM | PGDG | 1.9.1 | 1817161514 | pg_squeeze_$v | - |
| DEB | PGDG | 1.9.1 | 1817161514 | postgresql-$v-squeeze | - |
安装
您可以直接安装 pg_squeeze 扩展包的预置二进制包,首先确保 PGDG 仓库已经添加并启用:
pig repo add pgdg -u # 添加 PGDG 仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install pg_squeeze; # 当前活跃 PG 版本安装
pig ext install -y pg_squeeze -v 18 # PG 18
pig ext install -y pg_squeeze -v 17 # PG 17
pig ext install -y pg_squeeze -v 16 # PG 16
pig ext install -y pg_squeeze -v 15 # PG 15
pig ext install -y pg_squeeze -v 14 # PG 14
dnf install -y pg_squeeze_18 # PG 18
dnf install -y pg_squeeze_17 # PG 17
dnf install -y pg_squeeze_16 # PG 16
dnf install -y pg_squeeze_15 # PG 15
dnf install -y pg_squeeze_14 # PG 14
apt install -y postgresql-18-squeeze # PG 18
apt install -y postgresql-17-squeeze # PG 17
apt install -y postgresql-16-squeeze # PG 16
apt install -y postgresql-15-squeeze # PG 15
apt install -y postgresql-14-squeeze # PG 14
预加载配置:
shared_preload_libraries = 'pg_squeeze';
创建扩展:
CREATE EXTENSION pg_squeeze;
用法
pg_squeeze 需要设置 wal_level = logical,并且必须添加到 shared_preload_libraries 中。它使用逻辑解码而非触发器,在允许并发读写的同时移除表膨胀。
注册表进行定期处理
向 squeeze.tables 插入数据以启用定期膨胀检查:
INSERT INTO squeeze.tables (tabschema, tabname, schedule)
VALUES ('public', 'foo', ('{30}', '{22}', NULL, NULL, '{3, 5}'));
schedule 字段使用类似 crontab 的格式:(minutes, hours, days_of_month, months, days_of_week)。上面的配置在每周三和周五的 22:30 检查表 foo。
可选列:free_space_extra(触发所需的最小额外空闲空间百分比,默认 50)、min_size(最小 MB 数,默认 8)、vacuum_max_age(距上次 VACUUM 的最大时间,默认 1小时)、max_retry(重试次数,默认 0)、clustering_index(按此索引排序元组)、rel_tablespace、ind_tablespaces、skip_analyze。
临时压缩
SELECT squeeze.squeeze_table('public', 'pgbench_accounts');
SELECT squeeze.squeeze_table('public', 'mytable', 'my_cluster_idx', 'target_tablespace');
启动/停止工作进程
SELECT squeeze.start_worker(); -- 启动调度器和压缩工作进程
SELECT squeeze.stop_worker(); -- 停止当前数据库的所有工作进程
通过 postgresql.conf 在集群启动时自动启动:
squeeze.worker_autostart = 'my_database your_database'
squeeze.worker_role = postgres
监控
squeeze.log– 每个成功压缩的表对应一条记录(包含started、finished、ins_initial、ins、upd、del)squeeze.errors– 压缩过程中的错误squeeze.get_active_workers()– 显示当前活动的压缩工作进程及其进度
配置
squeeze.max_xlock_time– 最大排他锁时间,毫秒(默认不限制)squeeze.workers_per_database– 每个数据库的并发压缩工作进程数(默认 1)