這些引數控制 vacuuming 的行為。有關 vacuum 的目的和職責的更多資訊,請參閱 第 24.1 節。
這些設定控制 autovacuum 功能的行為。有關更多資訊,請參閱 第 24.1.6 節。請注意,這些設定中的許多都可以按表進行覆蓋;請參閱 儲存引數。
autovacuum
(boolean
) #控制伺服器是否應執行 autovacuum 啟動器守護程序。預設情況下此選項為開啟狀態;但是,要使 autovacuum 工作,還必須啟用 track_counts。此引數只能在 postgresql.conf
檔案或伺服器命令列中設定;但是,可以透過更改表儲存引數為單個表停用 autovacuuming。
請注意,即使此引數被停用,系統仍會在必要時啟動 autovacuum 程序以防止事務 ID 迴繞。有關更多資訊,請參閱 第 24.1.5 節。
autovacuum_worker_slots
(integer
) #指定為 autovacuum 工作程序保留的後端槽數。預設通常是 16 個槽,但如果您的核心設定不支援(如 initdb 期間確定的),則可能少於此數。此引數只能在伺服器啟動時設定。
更改此值時,請考慮也調整 autovacuum_max_workers。
autovacuum_max_workers
(integer
) #指定在任何給定時間內可能執行的 autovacuum 程序(除了 autovacuum 啟動器)的最大數量。預設值為 3
。此引數只能在 postgresql.conf
檔案或伺服器命令列中設定。
請注意,如果此值的設定高於 autovacuum_worker_slots,則不會產生任何效果,因為 autovacuum 工作程序是從該設定建立的槽位池中獲取的。
autovacuum_naptime
(integer
) #指定 autovacuum 在任何給定資料庫上執行之間的最短延遲。在每一輪中,守護程序會檢查資料庫,併為該資料庫中的表發出所需的 VACUUM
和 ANALYZE
命令。如果此值不帶單位指定,則將其視為秒。預設值為一分鐘(1min
)。此引數只能在 postgresql.conf
檔案或伺服器命令列中設定。
autovacuum_vacuum_threshold
(integer
) #指定在任何一個表中觸發 VACUUM
所需的已更新或已刪除元組的最小數量。預設值為 50 個元組。此引數只能在 postgresql.conf
檔案或伺服器命令列中設定;但是可以透過更改表儲存引數為單個表覆蓋此設定。
autovacuum_vacuum_insert_threshold
(integer
) #指定在任何一個表中觸發 VACUUM
所需的已插入元組的數量。預設值為 1000 個元組。如果指定 -1,autovacuum 將不會根據插入的數量觸發任何表的 VACUUM
操作。此引數只能在 postgresql.conf
檔案或伺服器命令列中設定;但是可以透過更改表儲存引數為單個表覆蓋此設定。
autovacuum_analyze_threshold
(integer
) #指定在任何一個表中觸發 ANALYZE
所需的已插入、已更新或已刪除元組的最小數量。預設值為 50 個元組。此引數只能在 postgresql.conf
檔案或伺服器命令列中設定;但是可以透過更改表儲存引數為單個表覆蓋此設定。
autovacuum_vacuum_scale_factor
(floating point
) #指定在決定是否觸發 VACUUM
時新增到 autovacuum_vacuum_threshold
的表大小的比例。預設值為 0.2
(表大小的 20%)。此引數只能在 postgresql.conf
檔案或伺服器命令列中設定;但是可以透過更改表儲存引數為單個表覆蓋此設定。
autovacuum_vacuum_insert_scale_factor
(floating point
) #指定在決定是否觸發 VACUUM
時新增到 autovacuum_vacuum_insert_threshold
的表中未凍結頁面的比例。預設值為 0.2
(表中未凍結頁面的 20%)。此引數只能在 postgresql.conf
檔案或伺服器命令列中設定;但是可以透過更改表儲存引數為單個表覆蓋此設定。
autovacuum_analyze_scale_factor
(floating point
) #指定在決定是否觸發 ANALYZE
時新增到 autovacuum_analyze_threshold
的表大小的比例。預設值為 0.1
(表大小的 10%)。此引數只能在 postgresql.conf
檔案或伺服器命令列中設定;但是可以透過更改表儲存引數為單個表覆蓋此設定。
autovacuum_vacuum_max_threshold
(integer
) #指定在任何一個表中觸發 VACUUM
所需的已更新或已刪除元組的最大數量,即對透過 autovacuum_vacuum_threshold
和 autovacuum_vacuum_scale_factor
計算出的值設定上限。預設值為 100,000,000 個元組。如果指定 -1,autovacuum 將不會強制執行觸發 VACUUM
操作的已更新或已刪除元組的最大數量。此引數只能在 postgresql.conf
檔案或伺服器命令列中設定;但是可以透過更改儲存引數為單個表覆蓋此設定。
autovacuum_freeze_max_age
(integer
) #指定表的 pg_class
.relfrozenxid
欄位在強制執行 VACUUM
操作以防止表內事務 ID 迴繞之前可以達到的最大年齡(以事務計數)。請注意,即使 autovacuum 通常被停用,系統仍會啟動 autovacuum 程序來防止迴繞。
Vacuum 還可以刪除 pg_xact
子目錄中的舊檔案,因此預設值為相對較低的 2 億事務。此引數只能在伺服器啟動時設定,但可以透過更改表儲存引數為單個表降低此設定。有關更多資訊,請參閱 第 24.1.5 節。
autovacuum_multixact_freeze_max_age
(integer
) #指定表的 pg_class
.relminmxid
欄位在強制執行 VACUUM
操作以防止表內多事務 ID 迴繞之前可以達到的最大年齡(以多事務計數)。請注意,即使 autovacuum 通常被停用,系統仍會啟動 autovacuum 程序來防止迴繞。
Vacuuming multixacts 還可以刪除 pg_multixact/members
和 pg_multixact/offsets
子目錄中的舊檔案,因此預設值為相對較低的 4 億多事務。此引數只能在伺服器啟動時設定,但可以透過更改表儲存引數為單個表降低此設定。有關更多資訊,請參閱 第 24.1.5.1 節。
autovacuum_vacuum_cost_delay
(floating point
) #指定在自動 VACUUM
操作中使用的成本延遲值。如果指定 -1,則將使用常規的 vacuum_cost_delay 值。如果此值不帶單位指定,則將其視為毫秒。預設值為 2 毫秒。此引數只能在 postgresql.conf
檔案或伺服器命令列中設定;但是可以透過更改表儲存引數為單個表覆蓋此設定。
autovacuum_vacuum_cost_limit
(integer
) #指定在自動 VACUUM
操作中使用的成本限制值。如果指定 -1
(這是預設值),則將使用常規的 vacuum_cost_limit 值。請注意,如果執行的 autovacuum 工作程序不止一個,則該值會按比例分配給它們,以便每個工作程序的限制之和不超過此變數的值。此引數只能在 postgresql.conf
檔案或伺服器命令列中設定;但是可以透過更改表儲存引數為單個表覆蓋此設定。
在執行 VACUUM 和 ANALYZE 命令期間,系統會維護一個內部計數器,該計數器會跟蹤執行的各種 I/O 操作的估計成本。當累積成本達到限制(由 vacuum_cost_limit
指定)時,執行操作的程序將根據 vacuum_cost_delay
指定的短時間休眠。然後,它將重置計數器並繼續執行。
此功能旨在允許管理員降低這些命令對併發資料庫活動的 I/O 影響。在許多情況下,VACUUM
和 ANALYZE
等維護命令不必快速完成;然而,通常非常重要的是這些命令不會顯著干擾系統執行其他資料庫操作的能力。基於成本的 vacuum 延遲為管理員提供了一種實現此目的的方法。
預設情況下,此功能對手動發出的 VACUUM
命令是停用的。要啟用它,請將 vacuum_cost_delay
變數設定為非零值。
vacuum_cost_delay
(floating point
) #當成本限制超過時,程序將休眠的時間量。如果此值不帶單位指定,則將其視為毫秒。預設值為 0
,表示停用基於成本的 vacuum 延遲功能。正值會啟用基於成本的 vacuuming。
使用基於成本的 vacuuming 時,vacuum_cost_delay
的適當值通常非常小,可能小於 1 毫秒。雖然 vacuum_cost_delay
可以設定為小數毫秒值,但在較舊的平臺上可能無法準確測量這種延遲。在這些平臺上,將 VACUUM
的節流資源消耗提高到 1 毫秒以上的水平需要更改其他 vacuum 成本引數。儘管如此,您仍應將 vacuum_cost_delay
設定為您平臺能夠一致測量的儘可能小的值;過大的延遲沒有幫助。
vacuum_cost_page_hit
(integer
) #vacuuming 共享緩衝區快取中找到的緩衝區的估計成本。它表示鎖定緩衝區池、查詢共享雜湊表和掃描頁面內容的成本。預設值為 1
。
vacuum_cost_page_miss
(integer
) #從磁碟讀取的緩衝區的 vacuuming 估計成本。這代表了鎖定緩衝區池、查詢共享雜湊表、從磁碟讀取所需塊並掃描其內容的工作量。預設值為 2
。
vacuum_cost_page_dirty
(integer
) #vacuum 修改先前是乾淨的塊時收取的估計成本。它表示將髒塊寫回磁碟所需的額外 I/O。預設值為 20
。
vacuum_cost_limit
(integer
) #這是導致 vacuuming 程序休眠 vacuum_cost_delay
的累積成本。預設值為 200
。
某些操作會持有關鍵鎖,因此應儘快完成。在這些操作期間不會發生基於成本的 vacuum 延遲。因此,累積的成本可能遠高於指定的限制。為避免在這種情況下出現不必要的長延遲,實際延遲的計算方法是 vacuum_cost_delay
* accumulated_balance
/ vacuum_cost_limit
,最大值為 vacuum_cost_delay
* 4。
為了在事務 ID 迴繞後仍能保持正確性,PostgreSQL 會將足夠舊的行標記為凍結。這些行對所有人可見;其他事務不需要檢查其插入 XID 來確定可見性。VACUUM
負責將行標記為凍結。以下設定控制 VACUUM
的凍結行為,應根據系統的 XID 消耗率和主要工作負載的資料訪問模式進行調整。有關事務 ID 迴繞和調整這些引數的更多資訊,請參閱 第 24.1.5 節。
vacuum_freeze_table_age
(integer
) #如果表的 pg_class
.relfrozenxid
欄位的年齡達到此設定指定的年齡,VACUUM
將執行一次積極掃描。積極掃描與常規 VACUUM
不同,它會訪問可能包含未凍結 XID 或 MXID 的每一頁,而不僅僅是可能包含死元組的頁面。預設值為 1.5 億事務。雖然使用者可以將此值設定為零到二十億之間的任何值,但 VACUUM
會默默地將有效值限制為 autovacuum_freeze_max_age 的 95%,以便週期性手動 VACUUM
有機會在為表啟動反迴繞 autovacuum 之前執行。有關更多資訊,請參閱 第 24.1.5 節。
vacuum_freeze_min_age
(integer
) #指定 VACUUM
用於決定何時觸發凍結具有較舊 XID 的頁面的截止年齡(以事務計數)。預設值為 5000 萬事務。雖然使用者可以將此值設定為零到十億之間的任何值,但 VACUUM
會默默地將有效值限制為 autovacuum_freeze_max_age 值的一半,以便強制 autovacuums 之間不會有不合理短的時間間隔。有關更多資訊,請參閱 第 24.1.5 節。
vacuum_failsafe_age
(integer
) #指定表的 pg_class
.relfrozenxid
欄位在 VACUUM
採取特別措施以避免系統範圍的事務 ID 迴繞失敗之前可以達到的最大年齡(以事務計數)。這是 VACUUM
的最後手段策略。通常,當防止事務 ID 迴繞的 autovacuum 已經執行一段時間後,該保護措施才會觸發,儘管該保護措施可能在任何 VACUUM
期間觸發。
當保護措施觸發時,將不再應用任何有效的成本延遲,並將跳過進一步的非關鍵維護任務(如索引 vacuuming),並且正在使用的任何 緩衝區訪問策略 都將被停用,從而使 VACUUM
可以自由使用所有 共享緩衝區。
預設值為 16 億事務。雖然使用者可以將此值設定為零到 21 億之間的任何值,但 VACUUM
會默默地將有效值調整為不小於 autovacuum_freeze_max_age 的 105%。
vacuum_multixact_freeze_table_age
(integer
) #如果表的 pg_class
.relminmxid
欄位的年齡達到此設定指定的年齡,VACUUM
將執行一次積極掃描。積極掃描與常規 VACUUM
不同,它會訪問可能包含未凍結 XID 或 MXID 的每一頁,而不僅僅是可能包含死元組的頁面。預設值為 1.5 億多事務。雖然使用者可以將此值設定為零到二十億之間的任何值,但 VACUUM
會默默地將有效值限制為 autovacuum_multixact_freeze_max_age 的 95%,以便週期性手動 VACUUM
有機會在為表啟動反迴繞之前執行。有關更多資訊,請參閱 第 24.1.5.1 節。
vacuum_multixact_freeze_min_age
(integer
) #指定 VACUUM
用於決定何時觸發凍結具有較舊多事務 ID 的頁面的截止年齡(以多事務計數)。預設值為 500 萬多事務。雖然使用者可以將此值設定為零到十億之間的任何值,但 VACUUM
會默默地將有效值限制為 autovacuum_multixact_freeze_max_age 值的一半,以便強制 autovacuums 之間不會有不合理短的時間間隔。有關更多資訊,請參閱 第 24.1.5.1 節。
vacuum_multixact_failsafe_age
(integer
) #指定表的 pg_class
.relminmxid
欄位在 VACUUM
採取特別措施以避免系統範圍的多事務 ID 迴繞失敗之前可以達到的最大年齡(以多事務計數)。這是 VACUUM
的最後手段策略。通常,當防止事務 ID 迴繞的 autovacuum 已經執行一段時間後,該保護措施才會觸發,儘管該保護措施可能在任何 VACUUM
期間觸發。
當保護措施觸發時,將不再應用任何有效的成本延遲,並且將跳過進一步的非關鍵維護任務(如索引 vacuuming)。
預設值為 16 億多事務。雖然使用者可以將此值設定為零到 21 億之間的任何值,但 VACUUM
會默默地將有效值調整為不小於 autovacuum_multixact_freeze_max_age 的 105%。
vacuum_max_eager_freeze_failure_rate
(floating point
) #指定 VACUUM
可以掃描並未能在可見性對映中設定所有凍結的頁面數量(佔關係總頁面的比例),之後將停用積極掃描。值為 0
表示完全停用積極掃描。預設值為 0.03
(3%)。
請注意,當啟用積極掃描時,只有凍結失敗才會計入上限,成功的凍結不計。成功的頁面凍結在內部被限制為關係中所有可見但未全部凍結的頁面的 20%。對成功頁面凍結設定上限有助於分攤多次常規 vacuum 的開銷,並限制了在下次積極 vacuum 之前頁面被再次修改的浪費性積極凍結的潛在負面影響。
此引數只能在 postgresql.conf
檔案或伺服器命令列中設定;但是可以透過更改相應的表儲存引數為單個表覆蓋此設定。有關調整 vacuum 凍結行為的更多資訊,請參閱 第 24.1.5 節。
如果您在文件中發現任何不正確、與您實際使用該功能不符或需要進一步說明的內容,請使用 此表單 報告文件問題。