PostgreSQL配置檔案--QUERY TUNING
阿新 • • 發佈:2019-02-09
5 QUERY TUNING
5.1 Planner Method Configuration.
下列引數控制查詢優化器是否使用特定的存取方法。除非對優化器特別瞭解,一般情況下,使用它們預設值即可。
5.1.1 enable_bitmapscan
布林型
預設: enable_bitmapscan = on
開啟或者關閉規劃器對點陣圖掃描規劃型別的使用。
5.1.2 enable_hashagg
布林型
預設: enable_hashagg = on
開啟或者關閉查詢規劃器對雜湊連線規劃型別的使用。
5.1.3 enable_hashjoin
布林型 預設: enable_hashjoin = on 開啟或者關閉查詢規劃器對雜湊連線規劃型別的使用。
5.1.4 enable_indexscan
布林型
預設: enable_indexscan = on
開啟或者關閉查詢規劃器對索引掃描規劃型別的使用。
5.1.5 enable_indexonlyscan
布林型
預設: enable_indexonlyscan = on
5.1.6 enable_material
布林型
預設: enable_material = on
5.1.7 enable_mergejoin
布林型
預設: enable_mergejoin = on
開啟或者關閉查詢規劃器對合並連線規劃型別的使用。
5.1.8 enable_nestloop
布林型 預設: enable_nestloop = on 開啟或者關閉查詢規劃器對巢狀迴圈連線規劃型別的使用。
5.1.9 enable_seqscan
布林型
預設: enable_seqscan = on
開啟或者關閉查詢規劃器對順序掃描規劃型別的使用。
5.1.10 enable_sort
布林型
預設: enable_sort = on
開啟或者關閉查詢規劃器使用明確的排序步驟。
5.1.11 enable_tidscan
布林型
預設: enable_tidscan = on
開啟或者關閉查詢規劃器對TID掃描規劃型別的使用。
5.2 優化器成本常量 Planner Cost Constants
優化器用一個正的浮點數來表示不同的查詢計劃的執行成本,每個基本的資料庫操作都會被賦給一個確定的成本常量,優化器根據每個基本操作的執行成本來計算每個查詢計劃的執行成本。不要輕易地改變下面的引數的值,使用預設值即可。
5.2.1 seq_page_cost
浮點數
預設: seq_page_cost = 1.0
設定從資料檔案上順序讀取一個數據塊的執行成本。
5.2.2 random_page_cost
浮點數
預設: random_page_cost = 4.0
設定從資料檔案上隨機讀取一個數據塊的執行成本。
IO很好的機器,不需要考慮離散和順序掃描的成本差異。
5.2.3 cpu_tuple_cost
浮點數
預設: cpu_tuple_cost = 0.01
設定處理每一個數據行的執行成本。
5.2.4 cpu_index_tuple_cost
浮點數
預設: cpu_index_tuple_cost = 0.005
設定在掃描索引的過程中處理每一個索引項的執行成本。
5.2.5 cpu_operator_cost
浮點數
預設: cpu_operator_cost = 0.0025
設定處理每一個運算子或函式的執行成本。
5.2.6 effective_cache_size
整數
預設: effective_cache_size = 4GB
設定單個查詢可以使用的資料緩衝區的大小。
和shared_buffer等記憶體無關,只是給優化器生成計劃使用的一個假設值。
設定稍大,優化器更傾向使用索引掃描而不是順序掃描,建議設定為可用空閒記憶體(是指主機實體記憶體在執行pg時得空閒值)的25%。
扣掉會話連線RSS,shared buffer, autovacuum worker, 剩下的都是OS可用的CACHE。
parallel_tuple_cost = 0.1
parallel_setup_cost = 1000.0
min_parallel_table_scan_size = 8MB
min_parallel_index_scan_size = 512kB
5.3 Genetic Query Optimizer
下列引數控制優化器使用的遺傳演算法。除非對遺傳演算法特別瞭解,一般情況下,使用它們預設值即可。
5.3.1 geqo
布林型
預設: geqo = on
開啟或者關閉遺傳優化器。
5.3.2 geqo_threshold
整數型
預設: geqo_threshold = 12
確定使用遺傳優化器的查詢型別。
如果FROM子句中引用的的表的數目超過geqo_threshold的值,就會使用遺傳優化器。對於簡單的查詢使用窮舉優化器。
5.3.3 geqo_effort
整數型
預設: geqo_effort = 5 取值範圍:1-10
控制遺傳優化器在生成查詢計劃需要的時間和查詢計劃的有效性之間做一個折中。
值越大,優化器花在選擇查詢計劃的上的時間越長,同時找到一個最優的查詢計劃的可能性就越大。
系統通常不直接使用geqo_effort的值,而是使用它的值來計算引數geqo_pool_size和geqo_generations的預設。
5.3.4 geqopoolsize
整數型
預設: geqo_pool_size = 0 典型的取值在10和1000之間
控制遺傳優化器的池(pool)大小。
池大小是遺傳群體中的個體數目。
如果引數的值是0,系統會自動根據geqo_effort的值和查詢中引用的表的個數選擇一個預設值。
5.3.5 geqo_generations
整數型
預設: geqo_generations = 0
控制遺傳優化器的代(generation)的大小。
代是遺傳演算法的迭代次數。
1表示典型的取值範圍與池的取值範圍相同。
如果引數的值是0,系統會自動根據geqo_pool_size的值和選擇一個預設值。
5.3.6 geqoselectionbias
浮點數
預設: geqo_selection_bias = 2.0 取值範圍:1.5-2.0
控制遺傳優化器的代選擇偏差(selection bias)的大小
5.3.7 geqo_seed = 0.0
浮點數
預設: geqo_seed = 0.0 取值範圍:0.0-1.0
5.4 Other Planner Options
5.4.1 default_statistics_target
整數型
預設: default_statistics_target = 100 取值範圍:1-10000
注意:PG10的配置檔案沒有該引數
設定預設的收集優化器統計資料的目標值。
它的值越大,ANALYZE操作的執行的時間越長,掃描的資料行的個數也就越多,得到的優化器統計資料就越準確。
也可以使用命令ALTER TABLE ... ALTER COLUMN ... SET STATISTICS來為表的每個列設定一個單獨的統計資料目標值,這個值的作用與引數default_statistics_target是一樣,它隻影響相關的列的統計資料收集過程。
5.4.2 constraint_exclusion
字元型
預設: constraint_exclusion = partition 取值範圍:on、off、partition
如果該引數的值是on,查詢優化器將使用表上的約束條件來優化查詢。
如果它的值是off,查詢優化器不會使用表上的約束條件來優化查詢。
cursor_tuple_fraction = 0.1 # range 0.0-1.0
from_collapse_limit = 8
join_collapse_limit = 8 # 1 disables collapsing of explicit JOIN clauses
force_parallel_mode = off