default_statistics_target
(integer
)
-
為沒有通過ALTER TABLE SET STATISTICS
設(shè)置列相關(guān)目標(biāo)的表列設(shè)置默認(rèn)統(tǒng)計(jì)目標(biāo)。更大的值增加了需要做ANALYZE
的時(shí)間,但是可能會(huì)改善規(guī)劃器的估計(jì)質(zhì)量。默認(rèn)值是 100。有關(guān)PostgreSQL查詢規(guī)劃器使用的統(tǒng)計(jì)信息的更多內(nèi)容, 請(qǐng)參考第 14.2 節(jié)。
constraint_exclusion
(enum
)
-
控制查詢規(guī)劃器對(duì)表約束的使用,以優(yōu)化查詢。 constraint_exclusion
的允許值是on
(對(duì)所有表檢查約束)、off
(從不檢查約束)和partition
(只對(duì)繼承的子表和UNION ALL
子查詢檢查約束)。
partition
是默認(rèn)設(shè)置。它通常與傳統(tǒng)的繼承樹一起使用來(lái)提高性能。
當(dāng)對(duì)一個(gè)特定表允許這個(gè)參數(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;
在啟用約束排除時(shí),這個(gè)SELECT
將完全不會(huì)掃描child1000
,從而提高性能。
目前,約束排除只在通過繼承樹實(shí)現(xiàn)表分區(qū)的情況中被默認(rèn)啟用。為所有表啟用它會(huì)增加額外的規(guī)劃開銷,特別是在簡(jiǎn)單查詢上并且不會(huì)產(chǎn)生任何好處。 如果沒有用傳統(tǒng)繼承樹分區(qū)的表時(shí),最好是完全關(guān)閉它。(注意分區(qū)表的等效特性是由單獨(dú)的參數(shù)控制的,?enable_partition_pruning
?.)
更多關(guān)于使用約束排除實(shí)現(xiàn)分區(qū)的信息請(qǐng)參閱第 5.11.5 節(jié)。
cursor_tuple_fraction
(floating point
)
-
設(shè)置規(guī)劃器對(duì)將被檢索的一個(gè)游標(biāo)的行的比例的估計(jì)。默認(rèn)值是 0.1。更小的值使得規(guī)劃器偏向?yàn)橛螛?biāo)使用“快速開始”計(jì)劃,它將很快地檢索前幾行但是可能需要很長(zhǎng)時(shí)間來(lái)獲取所有行。更大的值強(qiáng)調(diào)總的估計(jì)時(shí)間。最大設(shè)置為 1.0,游標(biāo)將和普通查詢完全一樣地被規(guī)劃,只考慮總估計(jì)時(shí)間并且不考慮前幾行會(huì)被多快地返回。
from_collapse_limit
(integer
)
-
如果生成的FROM
列表不超過這么多項(xiàng),規(guī)劃器將把子查詢?nèi)诤系缴蠈硬樵?。較小的值可以減少規(guī)劃時(shí)間,但是可能 會(huì)生成較差的查詢計(jì)劃。默認(rèn)值是 8。詳見第 14.3 節(jié)。
將這個(gè)值設(shè)置為?geqo_threshold
?或更大,可能觸發(fā)使用 GEQO 規(guī)劃器,從而產(chǎn)生非最優(yōu)計(jì)劃。見本文中第 19.7.3 節(jié)。
jit
(boolean
)
-
決定如果可用(見第 31 章),PostgreSQL是否可以使用JIT編譯。默認(rèn)值是on
。
join_collapse_limit
(integer
)
-
如果得出的列表中不超過這么多項(xiàng),那么規(guī)劃器將把顯式JOIN
(除了FULL JOIN
)結(jié)構(gòu)重寫到 FROM
項(xiàng)列表中。較小的值可減少規(guī)劃時(shí)間,但是可能會(huì)生成差些的查詢計(jì)劃。
默認(rèn)情況下,這個(gè)變量被設(shè)置成和from_collapse_limit
相同, 這樣適合大多數(shù)使用。把它設(shè)置為 1 可避免任何顯式JOIN
的重排序。因此查詢中指定的顯式連接順序就是關(guān)系被連接的實(shí)際順序。因?yàn)椴樵円?guī)劃器并不是總能 選取最優(yōu)的連接順序,高級(jí)用戶可以選擇暫時(shí)把這個(gè)變量設(shè)置為 1,然后顯式地指定他們想要的連接順序。更多信息請(qǐng)見第 14.3 節(jié)。
將這個(gè)值設(shè)置為?geqo_threshold
?或更大,可能觸發(fā)使用 GEQO 規(guī)劃器,從而產(chǎn)生非最優(yōu)計(jì)劃。見本文中第 19.7.3 節(jié)。
-
parallel_leader_participation
(boolean
)
-
允許領(lǐng)導(dǎo)者進(jìn)程執(zhí)行Gather
和Gather Merge
節(jié)點(diǎn)之下的查詢計(jì)劃而不是等待工作者進(jìn)程。默認(rèn)值是on
。將這個(gè)值設(shè)置為off
會(huì)降低工作者由于領(lǐng)導(dǎo)者讀取元組速度不夠快而被阻塞的可能性,但是要求領(lǐng)導(dǎo)者在產(chǎn)生第一個(gè)元組之前等待工作者進(jìn)程啟動(dòng)。領(lǐng)導(dǎo)者能夠幫助或者阻礙性能的程度取決于計(jì)劃的類型、工作者的數(shù)量以及查詢時(shí)長(zhǎng)。
force_parallel_mode
(enum
)
-
允許為測(cè)試目的使用并行查詢,即便是并不期望在性能上得到效益。force_parallel_mode
的允許值是off
(只在期望改進(jìn)性能時(shí)才使用并行模式)、on
(只要查詢被認(rèn)為是安全的,就強(qiáng)制使用并行查詢)以及regress
(和on
相似,但是有如下文所解釋的額外行為改變)。
更具體地說(shuō),把這個(gè)值設(shè)置為on
會(huì)在任何一個(gè)對(duì)于并行查詢安全的查詢計(jì)劃頂端增加一個(gè)Gather
節(jié)點(diǎn),這樣查詢會(huì)在一個(gè)并行工作者中運(yùn)行。即便當(dāng)一個(gè)并行工作者不可用或者不能被使用時(shí),諸如開始一個(gè)子事務(wù)等在并行查詢環(huán)境中會(huì)被禁止的操作將會(huì)被禁止,除非規(guī)劃器相信這樣做會(huì)導(dǎo)致查詢失敗。當(dāng)這個(gè)選項(xiàng)被設(shè)置時(shí)如果出現(xiàn)失敗或者意料之外的結(jié)果,查詢使用的某些函數(shù)可能需要被標(biāo)記為PARALLEL UNSAFE
(或者可能是
PARALLEL RESTRICTED
)。
把這個(gè)值設(shè)置為regress
具有設(shè)置成on
所有相同的效果,外加一些有助于自動(dòng)回歸測(cè)試的額外的效果。一般來(lái)說(shuō),來(lái)自于一個(gè)并行工作者的消息會(huì)包括一個(gè)上下文行指出這一點(diǎn),但是設(shè)置為regress
會(huì)消除這一行,這樣輸出就和非并行執(zhí)行完全一樣。同樣,被這個(gè)設(shè)置加到計(jì)劃上的Gather
節(jié)點(diǎn)在
EXPLAIN
輸出終會(huì)被隱藏起來(lái),這樣產(chǎn)生的輸出匹配設(shè)置為off
時(shí)產(chǎn)生的輸出。
plan_cache_mode
(enum
)
-
準(zhǔn)備語(yǔ)句(顯式準(zhǔn)備或隱式生成的,例如 PL/pgSQL)可以使用自定義或通用計(jì)劃執(zhí)行。 使用其特定的參數(shù)值集為每個(gè)執(zhí)行重新生成自定義計(jì)劃,而通用計(jì)劃不依賴于參數(shù)值,并且可以在執(zhí)行中重復(fù)使用。 因此,使用通用計(jì)劃可以節(jié)省計(jì)劃時(shí)間,但如果理想計(jì)劃嚴(yán)重依賴參數(shù)值,則通用計(jì)劃可能效率低下。 這些選項(xiàng)之間的選擇通常是自動(dòng)進(jìn)行的,但可以通過plan_cache_mode
覆蓋它。 允許的值為 auto
(默認(rèn)的),
force_custom_plan
和 force_generic_plan
。 這個(gè)設(shè)置是在執(zhí)行緩存計(jì)劃時(shí)考慮,而不是在準(zhǔn)備計(jì)劃時(shí)考慮。 更多信息請(qǐng)參閱 PREPARE.