重要參數詳解
PolarDB PostgreSQL版參數預設值的設定,綜合了效能、可用性以及可靠性方面的考慮,與社區版本預設值不一定相同。特別是以下參數,PolarDB根據最優效能原則進行了預設設定,您可以根據自己的需求在控制台自行修改。
參數 | 說明 |
synchronous_commit
| 該參數用於控制一個事務在返回成功指示給用戶端之前,是否需要等待WAL記錄被寫入磁碟。取值如下: off(預設):表示一個事務在返回成功指示給用戶端之前不需要等待WAL記錄被寫入磁碟。
說明 由於在向用戶端返回成功和真正保證事務持久性之間會有延遲(最大的延遲是wal_writer_delay的三倍,其中,wal_writer_delay預設為10 ms),因此參數設定為off時,可以提升資料庫的事務提交效率。 on:表示一個事務在返回成功指示給用戶端之前需要等待WAL記錄被寫入磁碟。
說明 如果應用依賴事務提交後,事務一定持久化到磁碟,可以在控制台中將參數設定為on。 remote_apply:表示一個事務在返回成功指示給用戶端之前需要等待WAL記錄被寫入磁碟。且需要確認資料apply在備份的本地交易記錄中,需要等待備份應用完事務,確保資料已經被處理,保證資料一致性。這將導致更大的提交延遲,因為其需等待WAL重放。 remote_write:表示一個事務在返回成功指示給用戶端之前需要等待WAL記錄被寫入檔案系統。 local:表示一個事務需要等待WAL記錄被寫入磁碟,但對返回成功指示給用戶端不作限制。
說明 您可以通過SHOW synchronous_commit;命令查看當前資料庫中該參數的設定情況。 |
wal_level
| 該參數用於決定將多少資訊寫入到WAL中。取值如下: |
log_statement
| 該參數用於設定審計日誌的層級。預設為ddl,表示只有DDL對應的SQL才會進行審計,更少的日誌列印可以提升資料庫效能。取值如下: |
常見參數參考
說明 部分參數不支援在控制台上進行修改,您可以通過登入叢集並使用命令列的方式進行查看與修改。
串連與認證
參數 | 說明 |
authentication_timeout
| 設定用戶端完成身份認證的最長等待時間。如果用戶端在此時間內未能完成認證,伺服器將主動關閉串連,以防止有問題的用戶端長時間佔用串連資源。 |
ssl
| 控制執行個體是否啟用並支援SSL加密串連。 |
自動清理 (Autovacuum)
自動清理(Autovacuum)進程負責回收死元組(已刪除或已更新的資料行所佔用的空間)並更新表的統計資訊,對鑑效組資料庫效能至關重要。
參數 | 說明 |
autovacuum
| 控制是否啟用自動清理(autovacuum)後台進程。為保證功能正常,參數track_counts也必須啟用。
說明 即使禁用此參數,當需要防止事務ID回卷時,系統仍會強制啟動清理進程。 |
autovacuum_max_workers
| 指定可同時啟動並執行自動清理背景工作處理序(除自動清理啟動器外)的最大數量。 |
autovacuum_naptime
| 指定自動清理進程在檢查完一個資料庫後,再次檢查該資料庫之前的最小休眠時間。在每一輪中後台進程檢查資料庫並根據需要為資料庫中的表發出VACUUM和ANALYZE命令。 |
autovacuum_vacuum_threshold
| 觸發VACUUM操作所需的最少變更(增、刪、改)元組數。 取值範圍:0~2147483647 預設值:50 單位:元組數
|
autovacuum_vacuum_scale_factor
| 觸發VACUUM操作時,表大小比例因素。實際閾值由autovacuum_vacuum_threshold和此因子共同決定,公式為:autovacuum_vacuum_threshold + (autovacuum_vacuum_scale_factor * 表的元組數)。 |
autovacuum_analyze_threshold
| 觸發ANALYZE操作所需的最少變更(增、刪、改)元組數。 取值範圍:0~2147483647 預設值:50 單位:元組數
|
autovacuum_analyze_scale_factor
| 觸發ANALYZE操作時,表大小比例因素。實際閾值由autovacuum_analyze_threshold和此因子共同決定,公式為:autovacuum_analyze_threshold + (autovacuum_analyze_scale_factor * 表的元組數)。 取值範圍:0~2147483647 預設值:0.05 單位:百分比
|
autovacuum_freeze_max_age
| 在強制執行VACUUM以防止事務ID回卷前,表中最舊的事務ID可存在的最大年齡。系統會為阻止回卷而自動發起清理,不受autovacuum參數禁用的影響。 取值範圍:100000~2000000000 預設值:500000000 單位:事務ID
說明 即便自動清理被禁用,系統仍將發起自動清理進程來阻止回卷。 |
autovacuum_multixact_freeze_max_age
| 在強制執行VACUUM以防止多事務ID(multixact ID)回卷前,表中最舊的多事務ID可存在的最大年齡。 取值範圍:10000~2000000000 預設值:700000000 單位:事務ID
說明 即便自動清理被禁用,系統仍將發起自動清理進程來阻止回卷。 |
autovacuum_vacuum_cost_delay
| 用於自動VACUUM操作的代價延遲時間。如果設為-1,則沿用vacuum_cost_delay的值。 |
autovacuum_vacuum_cost_limit
| 用於自動VACUUM操作的代價限制值。該總限制值將按比例分配給所有正在啟動並執行自動清理背景工作處理序(如果存在多個進程),因此每個背景工作處理序的限制值之和將不會超過此變數中的值。如果設定為-1,則將沿用vacuum_cost_limit的值。 取值範圍:-1~10000 預設值:10000 單位:代價值
|
檢查點與後台寫入
參數 | 說明 |
checkpoint_timeout
| 設定自動WAL檢查點之間的最長時間間隔。 |
bgwriter_delay
| 後台寫入進程(background writer)兩輪刷髒頁操作之間的休眠時間。 取值範圍:10~10000 預設值:600000 單位:毫秒
|
backend_flush_after
| 當後台進程寫入的髒頁數量超過此閾值後,作業系統會將檔案快取中的資料重新整理到磁碟。 |
full_page_writes
| 控制在檢查點(checkpoint)之後,當一個資料頁首次被修改時,是否將整個頁面的內容寫入WAL日誌。此功能用於防止因斷電等故障導致的頁面部分寫入問題。 |
wal_buffers
| 用於在記憶體中暫存WAL資料的共用記憶體大小。 |
wal_level
| 控制寫入WAL(預寫式日誌)的資訊量層級。不同層級支援不同功能:replica提供唯讀服務的備庫節點,logical提供邏輯複製服務。 取值範圍:replica/logical 預設值:replica
|
wal_writer_delay
| WAL寫入進程(walwriter)在兩輪WAL刷盤操作之間的最大休眠時間。 取值範圍:1~10000 預設值:600000 單位:毫秒
|
查詢計劃與執行
參數 | 說明 |
constraint_exclusion
| 控制查詢最佳化工具是否使用資料表條件約束(如CHECK約束)來最佳化查詢,尤其適用於分區表的查詢剪枝。 |
cpu_index_tuple_cost
| 設定規劃器對一次索引掃描中處理每一個索引項目的代價估計。 取值範圍:0~1.79769e+308 預設值:0.005
|
cpu_operator_cost
| 設定規劃器對於一次查詢中處理每個操作符或函數的代價估計。 取值範圍:0~1.79769e+308 預設值:0.0025
|
cpu_tuple_cost
| 設定規劃器對一次查詢中處理每一行的代價估計。 取值範圍:0~1.79769e+308 預設值:0.01
|
enable_partition_pruning
| 控制查詢最佳化工具是否在計劃階段和執行階段啟用分區剪枝最佳化,以跳過對無關分區的掃描。 |
seq_page_cost
| 設定規劃器對一次順序磁碟頁面擷取的代價估計。 |
jit
| 控制是否為特定查詢啟用即時編譯(Just-In-Time Compilation)以加速執行。 |
逾時設定
參數 | 說明 |
deadlock_timeout
| 在檢查到可能存在死結之前,一個事務所等待鎖的最長時間。 取值範圍:0~2147483647 預設值:1000 單位:毫秒
|
idle_in_transaction_session_timeout
| 事務處於空閑狀態(idle in transaction)下的最長允許時間。超過此時間,會話將被終止。設定為0表示禁用此逾時。 取值範圍:0~2147483647 預設值:3600000 單位:毫秒
|
lock_timeout
| 單個操作等待擷取表、行或其他對象鎖的最長時間。超過此時間,操作將報錯退出。設定為0表示禁用此逾時,將無限等待。 取值範圍:0~2147483647 預設值:0 單位:毫秒
|
statement_timeout
| 限制單條SQL語句執行的最長時間。超過此時間,該語句將被終止。設定為0表示無逾時限制。 |
日誌與審計
參數 | 說明 |
logging_collector
| 控制是否啟用日誌收集進程,該進程負責捕獲並寫入叢集運行期間的日誌。 |
log_connections
| 控制是否在日誌中記錄每一次成功的用戶端串連。 |
log_disconnections
| 控制是否在日誌中記錄每一次用戶端串連的斷開。 |
log_error_verbosity
| 設定錯誤記錄檔的詳細程度。 取值範圍: terse:僅包含嚴重性、主訊息和位置 default:包含更多細節,如詳細資料、提示等 verbose:所有詳細日誌
預設值:default
|
log_min_duration_statement
| 記錄執行時間超過指定閾值的慢SQL。設定為0將記錄所有SQL語句,設定為-1表示禁用慢SQL日誌功能。 取值範圍:0~2147483647 預設值:5000 單位:毫秒
|
log_statement
| 控制記錄到日誌中的SQL語句類型。 |
複製與高可用
參數 | 說明 |
hot_standby
| 控製備節點(唯讀節點)是否可以接受唯讀查詢。 |
hot_standby_feedback
| 控制唯讀節點是否向主節點反饋其正在啟動並執行查詢資訊。啟用後,主節點會延遲清理那些唯讀節點查詢仍在使用的舊資料行,以減少查詢衝突。 |
max_replication_slots
| 執行個體能夠支援的最大複製槽數量。 |
資源管理
參數 | 說明 |
dynamic_shared_memory_type
| 指定動態共用記憶體的實現方式。 取值範圍:posix/sysv/mmap 預設值:posix
|
gin_pending_list_limit
| 設定GIN索引在快速更新模式下,待處理列表(Pending List)的最大記憶體大小。 取值範圍:64~2097151 預設值:4096 單位:KB
|
huge_pages
| 控制執行個體是否嘗試使用作業系統提供的大頁記憶體。 |
max_files_per_process
| 每個資料庫後台進程允許同時開啟的最大檔案控制代碼數。 取值範圍:64~2147483647 預設值:10000
|
max_locks_per_transaction
| 每個事務能夠持有的最大鎖數量。 |
max_prepared_transactions
| 叢集中允許同時處於準備狀態的(兩階段交易認可)事務的最大數量。 |
max_worker_processes
| 叢集能夠啟動的後台背景工作處理序的最大總數,包括並行查詢背景工作處理序等。 |
temp_file_limit
| 限制單個後台進程可使用的臨時檔案(用於排序、雜湊等操作)的總大小。設定為-1表示不限制。 取值範圍:-1~2147483647 預設值:104857600(100 GB) 單位:KB
|
格式與行為
參數 | 說明 |
datestyle
| 設定日期和時間值的顯示格式。 |
default_with_oids
| 已廢棄的參數,用於控制CREATE TABLE是否預設包含OID。目前的版本不再支援OID,只能為OFF。 |
extra_float_digits
| 控制浮點數顯示時,在標準精度之外額外顯示的有效位元。用於更精確地展示浮點數值。 |
fsync
| 控制資料庫是否在關鍵操作(如COMMIT)後,強制將資料變更從作業系統緩衝同步到物理磁碟。 |
timezone
| 指定資料庫會話用於顯示和解釋時間戳記的時區。 |