pg_squeeze vs. VACUUM FULL CONCURRENTLY

pg_squeeze 是 CYBERTEC 开源的一个 PostgreSQL 扩展,提供了一个后台工作进程(每个数据库一个),定期监控用户定义的表,当检测到某个表超出了膨胀阈值时,pg_squeeze 会自动开始重建该表。重建过程在后台并发进行,它利用 PostgreSQL 内置的复制槽和 logical decoding,从 WAL 中提取重建期间发生的表更改。pg_squeeze 要求重建的表必须定义主键或唯一约束。 使用 pg_squeeze 需要在 postgresql.conf 中作相应的配置: wal_level = logical # pg_squeeze 使用 logical decoding shared_preload_libraries = 'pg_squeeze' # 用到了共享内存和 BackgroundWorker 用户可以通过将表的信息插入 squeeze.tables 表中来注册表。注册后,系统会定期检查表的状态,当满足条件时,会自动触发重建过程。对于不想注册表或者不需要预先检查膨胀的情况,可以手动重建。 -- 1. Register table for regular processing INSERT INTO squeeze.tables ( tabschema, tabname, schedule, free_space_extra, vacuum_max_age, max_retry ) VALUES ( 'public', 'bar', ('{30}', '{22}', NULL, NULL, '{3, 5}'), 30, '2 hours', 2 ); -- 2....

August 31, 2024 · 4 min · 643 words · zhjwpku