W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎勵
有幾種設(shè)置會導(dǎo)致查詢規(guī)劃器在任何情況下都不生成并行查詢計(jì)劃。為了讓并行查詢計(jì)劃能夠被生成,必須配置好下列設(shè)置。
max_parallel_workers_per_gather必須被設(shè)置為大于零的值。這是一種特殊情況,更加普遍的原則是所用的工作者數(shù)量不能超過max_parallel_workers_per_gather
所配置的數(shù)量。
此外,系統(tǒng)一定不能運(yùn)行在單用戶模式下。因?yàn)樵趩斡脩裟J较?,整個數(shù)據(jù)庫系統(tǒng)運(yùn)行在單個進(jìn)程中,沒有后臺工作者進(jìn)程可用。
如果下面的任一條件為真,即便對一個給定查詢通??梢援a(chǎn)生并行查詢計(jì)劃,規(guī)劃器都不會為它產(chǎn)生并行查詢計(jì)劃:
查詢要寫任何數(shù)據(jù)或者鎖定任何數(shù)據(jù)庫行。如果一個查詢在頂層或者 CTE 中包含了數(shù)據(jù)修改操作,那么不會為該查詢產(chǎn)生并行計(jì)劃。一種例外是,CREATE TABLE ... AS
、SELECT INTO
以及CREATE MATERIALIZED VIEW
這些創(chuàng)建新表并填充它的命令可以使用并行計(jì)劃。
查詢可能在執(zhí)行過程中被暫停。只要在系統(tǒng)認(rèn)為可能發(fā)生部分或者增量式執(zhí)行,就不會產(chǎn)生并行計(jì)劃。例如:用DECLARE CURSOR創(chuàng)建的游標(biāo)將永遠(yuǎn)不會使用并行計(jì)劃。類似地,一個FOR x IN query LOOP .. END LOOP
形式的 PL/pgSQL 循環(huán)也永遠(yuǎn)不會使用并行計(jì)劃,因?yàn)楫?dāng)并行查詢進(jìn)行時,并行查詢系統(tǒng)無法驗(yàn)證循環(huán)中的代碼執(zhí)行起來是安全的。
使用了任何被標(biāo)記為PARALLEL UNSAFE
的函數(shù)的查詢。大多數(shù)系統(tǒng)定義的函數(shù)都被標(biāo)記為PARALLEL SAFE
,但是用戶定義的函數(shù)默認(rèn)被標(biāo)記為PARALLEL UNSAFE
。參見第 15.4 節(jié)中的討論。
該查詢運(yùn)行在另一個已經(jīng)存在的并行查詢內(nèi)部。例如,如果一個被并行查詢調(diào)用的函數(shù)自己發(fā)出一個 SQL 查詢,那么該查詢將不會使用并行計(jì)劃。這是當(dāng)前實(shí)現(xiàn)的一個限制,但是或許不值得移除這個限制,因?yàn)樗鼤?dǎo)致單個查詢使用大量的進(jìn)程。
即使對于一個特定的查詢已經(jīng)產(chǎn)生了并行查詢計(jì)劃,在一些情況下執(zhí)行時也不會并行執(zhí)行該計(jì)劃。如果發(fā)生這種情況,那么領(lǐng)導(dǎo)者將會自己執(zhí)行該計(jì)劃在Gather
節(jié)點(diǎn)之下的部分,就好像Gather
節(jié)點(diǎn)不存在一樣。上述情況將在滿足下面的任一條件時發(fā)生:
因?yàn)楹笈_工作者進(jìn)程的總數(shù)不能超過max_worker_processes,導(dǎo)致不能得到后臺工作者進(jìn)程。
由于為并行查詢目的啟動的后臺工作者數(shù)量不能超過max_parallel_workers這一限制而不能得到后臺工作者。
客戶端發(fā)送了一個執(zhí)行消息,并且消息中要求取元組的數(shù)量不為零。執(zhí)行消息可見擴(kuò)展查詢協(xié)議中的討論。因?yàn)?a href="http://www.o2fo.com/postgresql13_1/postgresql13_1-n5ce3jix.html">libpq當(dāng)前沒有提供方法來發(fā)送這種消息,所以這種情況只可能發(fā)生在不依賴 libpq 的客戶端中。如果這種情況經(jīng)常發(fā)生,那在它可能發(fā)生的會話中設(shè)置 max_parallel_workers_per_gather為零是一個很好的主意,這樣可以避免產(chǎn)生連續(xù)運(yùn)行時次優(yōu)的查詢計(jì)劃。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: