溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PostgreSQL中與AUTOVACUUM IO相關的參數是什么

發布時間:2021-11-08 14:10:36 來源:億速云 閱讀:197 作者:iii 欄目:關系型數據庫

本篇內容介紹了“PostgreSQL中與AUTOVACUUM IO相關的參數是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

概覽

PG的MVCC要求“過期”的數據不能馬上被物理清除,而是標記為dead rows,這些dead rows后續會通過vacuuming過程清理。
vacuuming通過以下方式讓數據庫保持“健康”:
1.標記dead rows可用于存儲新數據,這樣可以避免不必要的磁盤浪費以及可以跳過dead rows以提升順序掃描的性能;
2.更新vm(用于跟蹤過期或已廢棄的數據,反應在pages上)。這可以提升index-only scans的性能;
3.避免出現事務ID回卷而導致的數據庫宕機。
PG提供了autovacuum機制,通過周期性的運行ANALYZE來收集最近頻繁更新的數據表統計信息,基于這些統計信息autovacuum進行調度清理dead rows。

IO相關參數

autovacuum逐張表進行處理,從磁盤或者memory讀取pages,如這些pages需清理dead rows則需要執行更新/寫入pages操作,因此涉及到IO。為了讓IO更為平滑而不影響正常的數據庫操作,PG提供了相關的參數用于控制autovacuum的執行頻繁程度,以免在數據庫壓力很大的情況下出現IO問題。

autovacuum_vacuum_cost_limit : total cost limit autovacuum could reach (combined by all autovacuum jobs).執行autovacuum的成本上限。
autovacuum_vacuum_cost_delay : autovacuum will sleep for these many milliseconds when a cleanup reaching autovacuum_vacuum_cost_limit cost is done.達到成本上限后,autovacuum需要休息多久,以毫秒為單位。
vacuum_cost_page_hit : Cost of reading a page that is already in shared buffers and doesn’t need a disk read.在緩存中命中pages時的成本。
vacuum_cost_page_miss : Cost of fetching a page that is not in shared buffers.沒有在緩存中命中時的成本。
vvacuum_cost_page_dirty : Cost of writing to each page when dead tuples are found in it.如pages中存在dead rows時的處理成本。

上述參數的默認值為:

autovacuum_vacuum_cost_limit = -1 ### 如為-1,則默認為vacuum_cost_limit,即200
autovacuum_vacuum_cost_delay = 20ms
vacuum_cost_page_hit = 1
vacuum_cost_page_miss = 10
vacuum_cost_page_dirty = 20

autovacuum的IO指標

根據上述參數,下面我們來推算下每秒autovacuum會產生的IO。
autovacuum_vacuum_cost_delay設定為20ms,那么每秒可以有50輪的autovacuum:50=1s/20ms。
內存讀:假設全部在緩存中命中,意味著讀取200個pages,200=autovacuum_vacuum_cost_limit/vacuum_cost_page_hit=200/1,可以推算出Read IO Rate=50*200*8K/s≈80MB/s;
OS讀:假設全部沒有命中,意味著要從OS(page cache或者disk)中讀取20個pages,20=autovacuum_vacuum_cost_limit/vacuum_cost_page_miss=200/10,Read IO Rate=50*20*8K/s≈8MB/s;
:假設讀出來的page都有dead rows需要處理,那么需要寫入10個pages,10=autovacuum_vacuum_cost_limit/vacuum_cost_page_dirty=200/20,Write IO Rate=50*10*8K/s≈5MB/s;

相對于現在的硬件設備,這樣的吞吐顯得過于“低調”,可通過提高autovacuum_vacuum_cost_limit來提升總體吞吐,比如把autovacuum_vacuum_cost_limit設置為2000,可以讓上述吞吐量有10x的提升。

“PostgreSQL中與AUTOVACUUM IO相關的參數是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女