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