由於pg的MVCC的實現機制與oracle存在較大差異,pg的undo空間和數據空間共用,導致數據空間膨脹嚴重,長時間不清理這種膨脹的垃圾數據,導致sql性能下降非常嚴重。
常規,數據庫級調整
常規調整
對於頻繁更新的表,設置填充因子fillfactor
語法:
若是分區表,需在分區子表設置。
alter table table_xx set (fillfactor=80);
功能:
讓每個數據塊預留一定的空間用於記錄的更新,也可以提升update的效率。
缺點:
Insert效率有所降低,同時加大磁盤開銷。
對於超大表,調低vacuum觸發閾值
語法:
若是分區表,需在分區子表設置。
alter table table_xx set (autovacuum_vacuum_threshold=100);
或
alter table table_xx set (autovacuum_vacuum_scale_factor =0.001);
功能:
使超大表更積極觸發vacuum機制。
定時任務,通過工具周期性維護
推薦2款工具,均為開源軟件,建議通過定時任務在業務閑時,每周維護一次。
以下為2款工具的詳細對比數據:
垃圾數據回收工具對比
從工具穩定性和易維護角度,推薦使用pg_repack。
pg_repack
wget https://github.com/reorg/pg_repack/archive/ver_1.4.5.zip
make USE_PGXS=1
make install USE_PGXS=1
pg_squeeze
git clone https://github.com/cybertec-postgresql/pg_squeeze.git
make USE_PGXS=1
make install USE_PGXS=1
pgcompacttable
github已經不維護,不建議使用
pg_bloat_check
該工具僅檢測,無垃圾回收功能。且檢測效率較低,不推薦。
其他
1.truncate 不會引起膨脹,delete 會引起膨脹。全表刪除時,盡量使用truncate。比如全量數據同步的定時任務,第一步一般都是清空目標表,此時建議使用truncate清空。
————————————————
版權聲明:本文為CSDN博主「weixin_39915500」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_39915500/article/details/112593688