溫馨提示×

溫馨提示×

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

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

postgresql中autovacuum有什么用

發(fā)布時間:2021-11-26 09:12:23 來源:億速云 閱讀:197 作者:小新 欄目:大數(shù)據(jù)

小編給大家分享一下postgresql中autovacuum有什么用,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

懂得postgresql  數(shù)據(jù)庫原理的都知道 vacuum 的重要性,而相關線程中,autovacuum 是重要的,或者說最重要也是當之無愧。

postgresql中autovacuum有什么用

Autovacuum 作為postgresql 的一個進程一致在工作。

那么這個autovacuum 在除了進行和他名字一樣的工作之外,他還負責要收集更多關于dead tuple 和膨脹的信息,要對更新表統(tǒng)計信息的表進行分析,以便優(yōu)化器能夠為SQL語句選擇最佳執(zhí)行計劃。

在PG中還有另外一進程 stats collector ,用于跟蹤使用情況和活動信息。這些信息會被autovacuum來進行利用。來更好的進行相關的清理工作。

postgresql中autovacuum有什么用

這兩個功能在 postgresql.conf 中的開關就是

postgresql中autovacuum有什么用

postgresql中autovacuum有什么用

同時在系統(tǒng)進行vacuum的同時,作為DBA 是希望能進行分析的所以日志中能進行記錄那是最好的。所以log_autoovacuum_min_duration 可以記錄指定時間超過250毫秒的vacuum 就會被記錄。

postgresql中autovacuum有什么用

那在重啟后,我們能看到的日志中的記錄就是下面這個樣子。所以Postgresql在日志方面的記錄是很全面的,這相對于某些數(shù)據(jù)庫(SQL SERVER 和 MYSQL)要好的太多了。

postgresql中autovacuum有什么用

所以給POSTGRESQL 日志配一個好的快速的空間在大型頻繁的系統(tǒng)是有必要的。

下面接著的問題是,到底什么樣的表會被進行autovacuum,或者是備選對象。

實際死的tuple >= autovacuum_vacuum_scale_factor * number of tuples + autovacuum_vacuum_threshold

上面的公式就是表在插入,更新,刪除后會被選入到autovacuum中的方法。下面的參數(shù)們就是觸發(fā)分析或進行autovacuum的選擇項

postgresql中autovacuum有什么用

例如上面的操作 例如一個表中的行數(shù)是1000行(1000*0.2)+50 = 250行,當這個表現(xiàn)在的死行超過250行,就要觸發(fā)vacuum了。所以調整這個參數(shù)是很重要的,另外如果有大表的情況下,你會發(fā)現(xiàn)你清理dead T 的速度是越來越慢,那就的對有些大表進行自定義。

怎么定義?首先先確認經常有處理不完的dead tuple 是那些表,

postgresql中autovacuum有什么用

SELECT n_tup_ins as "inserts",n_tup_upd as "updates",n_tup_del as "deletes", n_live_tup as "live_tuples", n_dead_tup as "dead_tuples"

FROM pg_stat_user_tables

通過手動的方式,可以調整這兩個參數(shù)來達到針對這個表進行更頻繁或者更不頻繁的vacuum的方法。

postgresql中autovacuum有什么用

在講完這些后,還有一個問題,就是清理表的vacuum 的線程有沒有數(shù)量的限制。autovacuum_max_workers 就是控制工作線程的數(shù)量的參數(shù),如果你有四個數(shù)據(jù)庫,則另一個數(shù)據(jù)庫就要等待,到下一個周期才能輪上這個數(shù)據(jù)庫的表進行操作。所以可以適當?shù)恼{整一下這個參數(shù),如果你一個cluster中的數(shù)據(jù)庫比較多的情況下。

postgresql中autovacuum有什么用

說到這里,目前還有一個問題需要考慮,就是業(yè)務繁忙時期到底要不要進行AUTOVACUUM, 是不是會在業(yè)務繁忙的時候,雪上加霜,對于性能更不利。

自動真空從磁盤讀取一個表的8KB(默認的block_size)頁,并修改/寫入包含死元組的頁。這涉及讀和寫IO。因此,這可能是一個IO密集型操作,在事務高峰期間,在一個包含許多死元組的巨大表上運行一個自動真空,是否是一件好事,所以為了避免這樣的情況,可以在參數(shù)中進行配置。

vacuum_cost_page_hit 是你在緩沖中能讀取頁面的cost 

vacuum_cost_page_miss 是不在緩沖中讀取的頁面的cost

vacuum_cost_page_dirty 是在頁面中發(fā)現(xiàn)dead T 后進行重寫的成本

postgresql中autovacuum有什么用

假如 vacuum_cost_delay = 20   的情況下,一秒是1000毫秒,則會發(fā)生50次的vacuum,在默認的情況下 根據(jù)時間的定義   

下面有一個公式

200 * 50 * 8 = 在buffer 中可以處理的dead T數(shù)據(jù)量

200/10*50 *8= 在磁盤中可以處理的dead T 的數(shù)據(jù)量

200/20*50*8  = 在一個周期可以處理的dead T 并改寫的數(shù)量

這三個數(shù)量是成遞減的分布的,所以調高autovacuum_max_workers,成本被平均分配給實例中運行的所有autovacuum進程的autovacuum數(shù)量。因此,增加autovacuum um_max_workers可能會延遲當前運行的autovacuum workers的自動真空執(zhí)行。增加autovacuum um_vacuum um_cost_limit可能會導致IO瓶頸。

當然這些參數(shù)也是可以針對表進行特殊設置的。所以到此autovacuum 的調整絕對屬于一個高智商的數(shù)學和判斷題。

看完了這篇文章,相信你對“postgresql中autovacuum有什么用”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細節(jié)

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

AI