清空數據 清理_postgresql數據膨脹優化方案


由於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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM