?
本文檔使用
php中文網手冊 發(fā)布
這些配置參數提供了影響查詢優(yōu)化器選擇查詢規(guī)劃的原始方法。如果優(yōu)化器 為特定的查詢選擇的缺省規(guī)劃并不是最優(yōu),那么我們就可以通過使用這些 配置參數強制優(yōu)化器選擇一個更好的規(guī)劃來temporary解決這個 問題。不過,永久地關閉這些設置幾乎從不是個好主意。更好的改善優(yōu)化器 選擇規(guī)劃的方法包括調節(jié)Section 18.6.2、 更頻繁運行ANALYZE、增大配置參數 default_statistics_target的值、使用 ALTER TABLE SET STATISTICS為某個字段增加收集的 統計信息。
打開或者關閉規(guī)劃器對位圖掃描規(guī)劃類型的使用。缺省是on
打開或者關閉規(guī)劃器對Hash聚集規(guī)劃類型的使用。缺省是on
打開或者關閉規(guī)劃器對Hash連接規(guī)劃類型的使用。缺省是on
打開或者關閉規(guī)劃器對索引掃描規(guī)劃類型的使用。缺省是on
啟用或禁用查詢規(guī)劃器的具體化的使用。它可以完全廢止具體化, 但禁用該變量后悔阻止規(guī)劃器插入具體節(jié)點,除非是要求得正確得當。 缺省是on。
打開或者關閉規(guī)劃器對融合連接規(guī)劃類型的使用。缺省是 on
打開或者關閉規(guī)劃器對嵌套循環(huán)連接規(guī)劃類型的使用。我們不可能完全 消除嵌套循環(huán)連接,但是把這個變量關閉就會讓規(guī)劃器在存在其它方法的 時候優(yōu)先選擇其它方法。缺省是on.
打開或者關閉規(guī)劃器對順序掃描規(guī)劃類型的使用。我們不可能完全消除 順序掃描,但是把這個變量關閉會讓規(guī)劃器在存在其它方法的時候優(yōu)先 選擇其它方法。缺省是on.
打開或者關閉規(guī)劃器使用明確的排序步驟。我們不可能完全消除明確的排序, 但是把這個變量關閉可以讓規(guī)劃器在存在其它方法的時候優(yōu)先選擇其它方法。 缺省是on
打開或者關閉規(guī)劃器對 TID 掃描規(guī)劃類型的使用。缺省是on.
本節(jié)中描述的cost可以按照任意標準度量。我們只關心其相對值, 因此以相同的系數縮放它們將不會對規(guī)劃器產生任何影響。默認情況下,它們 以抓取順序頁的開銷作為基準單位。也就是說將seq_page_cost 設為 1.0 ,同時其它開銷參數對照它來設置。當然你也可以使用其它基準, 比如以毫秒計的實際執(zhí)行時間。
Note: 糟糕的是,現在還沒有定義得很合理的方法來判斷下面出現的"開銷"變量族的 理想數值。它們最好按照某個特定安裝的平均查詢開銷來衡量。這意味著僅僅 根據很少量的試驗結果來修改它們是很危險的。
設置規(guī)劃器計算一次順序磁盤頁面抓取的開銷。默認值是1.0。 通過設置同名的表空間參數,這個值可以重寫為一個特定的表空間。 參閱ALTER TABLESPACE。
設置規(guī)劃器計算一次非順序磁盤頁面抓取的開銷。默認值是4.0。 通過設置同名的表空間參數,這個值可以重寫為一個特定的表空間。 參閱ALTER TABLESPACE。
(相對于seq_page_cost)減少這個值將導致更傾向于使用 索引掃描,而增加這個值將導致更傾向于使用順序掃描??梢酝ㄟ^同時 增加或減少這兩個值來調整磁盤I/O相對于CPU的開銷(在下面的參數 中描述)。
Tip: 雖然允許你將random_page_cost設置的比 seq_page_cost小,但是物理上的實際情況并不受此影響。 然而當所有數據庫都位于內存中時,兩者設置為相等是非常合理的,因為 在此情況下,亂序抓取并不比順序抓取開銷更大。同樣,在緩沖率很高的 數據庫上,你應當相對于 CPU 開銷同時降低這兩個值,因為獲取內存中 的頁比通常情況下的開銷小許多。
設置規(guī)劃器計算在一次查詢中處理一個數據行的開銷。缺省是 0.01 。
設置規(guī)劃器計算在一次索引掃描中處理每條索引行的開銷。缺省是 0.005 。
設置規(guī)劃器計算在一次查詢中執(zhí)行一個操作符或函數的開銷。缺省是 0.0025 。
為規(guī)劃器設置在一次索引掃描中可用的磁盤緩沖區(qū)的有效大小。 這個參數會在計算一個索引的預計開銷值的時候加以考慮。更高的數值 會導致更可能使用索引掃描,更低的數值會導致更有可能選擇順序掃描。 在設置這個參數的時候,你還應該考慮PostgreSQL 的數據文件會使用的共享緩沖區(qū)和內核的磁盤緩沖區(qū)。另外,還要考慮 預計會使用不同索引的并發(fā)查詢數目,因為它們必須共享可用的內存空間。 這個參數對PostgreSQL分配的共享內存 大小沒有影響,它也不會使用內核磁盤緩沖,它只用于估算。數值是用 磁盤頁來計算的,通常每個頁面是 8192 字節(jié)。缺省是 16384 (128MB)。
GEQO是一個使用探索式搜索來執(zhí)行查詢規(guī)劃的算法。它可以降低負載查詢的規(guī)劃時間。 同時,GEQO的檢索是隨機的,因此它的規(guī)劃可能會不可確定。 更多信息參閱Chapter 50。
允許或禁止基因查詢優(yōu)化,通常情況下最好不要把它應用于生產, 缺省是允許。geqo_threshold 變量提供了一種為特定類別的 查詢關閉 GEQO 的更精細方法。
只有當涉及的FROM關系數量至少有這么多個的時候, 才使用基因查詢優(yōu)化。對于數量小于此值的查詢,也許使用判定性的 窮舉搜索更有效。但是對于有許多表的查詢,規(guī)劃器做判斷要花很多時間。 缺省是12。請注意一個FULL OUTER JOIN構造只算一個 FROM項。
控制 GEQO 里規(guī)劃時間和查詢規(guī)劃的有效性之間的平衡。這個變量必須是 一個范圍從 1 到 10 的整數。缺省值是 5 。大的數值增加花在進行查詢 規(guī)劃上面的時間,但是也很可能會提高選中更有效的查詢規(guī)劃的幾率。
geqo_effort實際上并沒有直接干什么事情; 只是用于計算其它那些影響 GEQO 行為變量的缺省值(在下面描述)。 如果你愿意,你可以手工設置其它參數。
控制 GEQO 使用的池大小。池大小是基因全體中的個體數量。它必須至少 是 2 ,并且有用的數值通常在 100 和 1000 之間。如果把它設置為 零(缺省),那么就會基于geqo_effort和查詢中表的 數量選取一個合適的值。
控制 GEQO 使用的子代數目。子代的意思是算法的迭代次數。它必須至少 是 1 ,有用的值范圍和池大小相同。如果設置為零(缺省),那么將基于 geqo_pool_size選取合適的值。
控制GEQO使用的選擇性偏好。選擇性偏好是在一個種群中的選擇性壓力。 數值可以是1.5到2.0之間;缺省是2.0。
控制GEQO使用的隨機數產生器的初始值,用以選擇隨機路徑。 這個值可以從0(缺?。┑?。修改這個值會改變連接路徑搜索的設置, 同時會找到最優(yōu)或最差路徑。
為沒有用ALTER TABLE SET STATISTICS設置字段相關目標的 表中其它字段設置缺省統計目標。更大的數值增加了ANALYZE 所需要的時間,但是可能會改善規(guī)劃器的估計質量。缺省值是 100 。 有關PostgreSQL的查詢規(guī)劃器使用的統計的更多信息, 請參考節(jié)Section 14.2。
控制使用表約束的查詢規(guī)劃的優(yōu)化查詢。 The allowed values ofconstraint_exclusionare on(examine constraints for all tables), off(never examine constraints), and partition(examine constraints only for inheritance child tables andUNION ALLsubqueries). partitionis the default setting. It is often used with inheritance and partitioned tables to improve performance.
如果這個參數支持一個特定的表 ,那么規(guī)劃器用查詢條件和 CHECK約束進行比較,并且在查詢條件和約束沖突的情況下, 忽略對表的掃描。比如:
CREATE TABLE parent(key integer, ...); CREATE TABLE child1000(check (key between 1000 and 1999)) INHERITS(parent); CREATE TABLE child2000(check (key between 2000 and 2999)) INHERITS(parent); ... SELECT * FROM parent WHERE key = 2400;
在打開約束排除的時候,這個SELECT將完全不會掃描 child1000。這樣可以在使用繼承制作分區(qū)表的時候提高性能。
目前,約束排除在缺省啟用,只用于經常進行表分區(qū)的情況。 為所有表啟用約束排除會明顯增加規(guī)劃開銷,特別是在一個簡單查詢時, 對簡單查詢而言,頻繁的約束排除不會產生任何好處。 如果沒有分區(qū)表時,最好是完全關閉該選項。
參閱Section 5.9.4以獲得更多信息。
設置游標將被檢索的行的分數的規(guī)劃估計。缺省是0.1。小于該值時會為游標偏向使用 "fast start"規(guī)劃,這將快速檢索前幾行,雖然可能花費很長的時間讀取所有行。 大于該值時會更重視總體的估計時間。最大可設置為1.0,此時游標會被規(guī)劃為類似于定期查詢, 只考慮總估算時間,而不考慮多久才會輸出第一個行。
如果生成的FROM列表不超過這個限制的項數, 規(guī)劃器將把子查詢融合到上層查詢。小的數值降低規(guī)劃的時間,但是可能 會生成差些的查詢計劃。缺省是 8 。更多信息請查看節(jié)13.3。
將這個值設置為geqo_threshold或更大,可能觸發(fā) 使用GEQO規(guī)劃器,從而產生不確定的計劃。 參閱Section 18.6.3。
如果得出的列表不超過這個數目的項,那么規(guī)劃器將把除 FULL JOIN之外的JOIN構造抹平到 FROM列表項中。小的數值降低規(guī)劃的時間,但是可能會生成 差些的查詢計劃。
缺省時,這個值和from_collapse_limit相同, 這樣適合大多數場合。把它設置為 1 則避免任何JOIN 的融合,這樣就將明確使用語句中的連接順序。查詢優(yōu)化器并不是總能 選取最優(yōu)的連接順序;高級用戶可以選擇暫時把這個變量設置為 1 , 然后明確地聲明他們需要的連接順序。 更多信息參見節(jié)Section 14.3。
將這個值設置為geqo_threshold或更大,可能觸發(fā) 使用GEQO規(guī)劃器,從而產生不確定的計劃。參閱Section 18.6.3。