表膨脹問題和應對建議
更新時間 2025-02-05 09:37:24
最近更新時間: 2025-02-05 09:37:24
分享文章
本頁介紹天翼云TeleDB數據庫中表膨脹問題和應對建議。
由于TeleDB的MVCC實現機制原因,表數據的歷史版本是保存在當前數據文件中的,通過VACUUM標識和回收一定時間之前的歷史版本。對于增、刪、改頻率很高的表,由于VACUUM回收需要一定的時間,且回收與長事務有關,長事務會導致VACUUM不能及時標識回收歷史版本,而頻繁的新增、更新操作會寫更多的新的頁(數據塊),導致表數據文件不斷膨脹。
表膨脹會帶來一些性能影響,如占用了更多的空間,全表掃描時需要掃描更多的的頁(數據塊)、更耗I/O、更耗時、索引掃描效率也會降低;VACUUM FREEZE時因需要全表掃描,同樣效率更低。這和Oracle數據庫頻繁增、刪、改導致的高水位表現一樣。
應對表膨脹的建議有幾點:
- 定期清理長事務,避免因長事務導致VACUUM回收失效。
- 大事務盡量拆成小事務。
- 設置合理的AUTOVACUUM,盡量能及時回收空間。
- 配置更好的硬件資源,提高SQL執行效率,提升VACUUM回收效率。
- 定期監測表膨脹情況,必要時在維護窗口、業務低峰期進行手動回收,或重建表。
- 用其它方案代替高頻增刪改的表,例如加入緩存層,高頻操作在緩存層實時操作,然后定時同步到數據庫。
- 評估是否可以設計為分區表,通過定期清理歷史分區的方式加快數據回收。