天天看點

影響或控制PostgreSQL垃圾回收的參數或因素

postgresql , 垃圾回收 , 參數 , freeze

哪些參數或因素将影響或控制postgresql的垃圾回收呢?

1、控制vacuum指令的睡眠時間,當vacuum的階段性cost大于vacuum_cost_limit時,睡眠一段時間後繼續。

2、vacuum時,不同資料塊(在shared buffer中命中的塊、未命中的塊、髒塊)的成本

3、vacuum階段性cost門檻值

4、對隻讀事務設定的逾時時間,防止long sql帶來的膨脹

5、在ckpt後第一次産生或變更的髒塊,是否記錄整個資料塊的内容到wal中。

6、是否開啟wal壓縮

7、自動垃圾回收相關程序

1、資料庫不能回收long sql事務快照後産生的垃圾,也即是說,資料庫中最老的事務,決定了資料庫可以回收的垃圾上限。在此事務快照後産生的垃圾都無法被回收。

2、snapshot too old,開啟這個參數後,隻讀事務的允許時間超過這個時間後,将自動復原。防止long sql引起的膨脹。

3、備庫開啟了hot_standby_feedback = on時,備庫如果運作long sql,也會導緻主庫垃圾回收受限。導緻膨脹。同時如果naptime很小,則可能導緻頻繁的無效vacuum發生,導緻資料庫的io,cpu飙高。

4、freeze是掃描全表的動作,如果大表發生freeze,可能導緻大量的資料檔案讀寫io,以及wal的寫io。通過wal日志分析,可以找到freeze的蛛絲馬迹。

5、如果主庫設定了vacuum_defer_cleanup_age 大于 0 ,可能導緻膨脹,同時如果naptime很小,則可能導緻頻繁的無效vacuum發生,導緻資料庫的io,cpu飙高。