15.3. ÐаÑаллелÑнÑе планÑ
Так как каждÑй ÑабоÑий пÑоÑеÑÑ Ð²ÑполнÑÐµÑ Ð¿Ð°ÑаллелÑнÑÑ ÑаÑÑÑ Ð¿Ð»Ð°Ð½Ð° до конÑа, нелÑÐ·Ñ Ð¿ÑоÑÑо взÑÑÑ Ð¾Ð±ÑÑнÑй план запÑоÑа и запÑÑÑиÑÑ ÐµÐ³Ð¾ в неÑколÑÐºÐ¸Ñ Ð¸ÑполниÑелÑÑ . Ð ÑÑом ÑлÑÑае вÑе иÑполниÑели вÑдавали Ð±Ñ Ð¿Ð¾Ð»Ð½Ñе копии вÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ набоÑа ÑезÑлÑÑаÑов, Ñак ÑÑо запÑÐ¾Ñ Ð²ÑполниÑÑÑ Ð½Ðµ бÑÑÑÑее, Ñем обÑÑно, а его ÑезÑлÑÑаÑÑ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð½ÐµÐºÐ¾ÑÑекÑнÑми. ÐмеÑÑо ÑÑого паÑаллелÑной ÑаÑÑÑÑ Ð¿Ð»Ð°Ð½Ð° должно бÑÑÑ Ñо, ÑÑо Ð´Ð»Ñ Ð¾Ð¿ÑимизаÑоÑа пÑедÑÑавлÑеÑÑÑ ÐºÐ°Ðº ÑаÑÑиÑнÑй план; Ñо еÑÑÑ Ñакой план, пÑи вÑполнении коÑоÑого в оÑделÑном пÑоÑеÑÑе бÑÐ´ÐµÑ Ð¿Ð¾Ð»ÑÑено ÑолÑко подмножеÑÑво вÑÑ Ð¾Ð´Ð½ÑÑ ÑÑÑок, а ÐºÐ°Ð¶Ð´Ð°Ñ ÑÑебÑÑÑаÑÑÑ ÑÑÑока ÑезÑлÑÑаÑа бÑÐ´ÐµÑ Ð³Ð°ÑанÑиÑованно вÑдана Ñовно одним из ÑоÑÑÑдниÑаÑÑÐ¸Ñ Ð¿ÑоÑеÑÑов.
15.3.1. ÐаÑаллелÑнÑе ÑканиÑованиÑ
РнаÑÑоÑÑее вÑÐµÐ¼Ñ ÐµÐ´Ð¸Ð½ÑÑвеннÑм ваÑианÑом ÑканиÑованиÑ, адапÑиÑованнÑм Ð´Ð»Ñ ÑабоÑÑ Ð² паÑаллелÑном Ñежиме, ÑвлÑеÑÑÑ Ð¿Ð¾ÑледоваÑелÑное ÑканиÑование. Таким обÑазом, ÑÐµÐ»ÐµÐ²Ð°Ñ ÑаблиÑа в паÑаллелÑном плане вÑегда бÑÐ´ÐµÑ ÑканиÑоваÑÑÑÑ Ñзлом Parallel Seq Scan. Ðлоки оÑноÑÐµÐ½Ð¸Ñ ÑазделÑÑÑÑÑ Ð¼ÐµÐ¶Ð´Ñ ÑоÑÑÑдниÑаÑÑими пÑоÑеÑÑами и вÑдаÑÑÑÑ Ð¸Ð¼ по одномÑ, Ñак ÑÑо доÑÑÑп к оÑноÑÐµÐ½Ð¸Ñ Ð¾ÑÑаÑÑÑÑ Ð¿Ð¾ÑледоваÑелÑнÑм. ÐаждÑй оÑделÑнÑй пÑоÑеÑÑ ÑнаÑала поÑеÑÐ°ÐµÑ Ð²Ñе коÑÑежи на назнаÑенной ÐµÐ¼Ñ ÑÑÑаниÑе, и ÑолÑко заÑем пеÑеÑ
Ð¾Ð´Ð¸Ñ Ðº новой.
15.3.2. ÐаÑаллелÑнÑе ÑоединениÑ
Ð¦ÐµÐ»ÐµÐ²Ð°Ñ ÑаблиÑа Ð¼Ð¾Ð¶ÐµÑ ÑоединÑÑÑÑÑ Ñ Ð¾Ð´Ð½Ð¾Ð¹ или неÑколÑкими дÑÑгими ÑаблиÑами Ñ Ð¸ÑполÑзованием вложеннÑÑ Ñиклов или Ñоединений по Ñ ÐµÑÑ. ÐнÑÑÑенней ÑÑоÑоной ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð»Ñбой вид не паÑаллелÑного плана, коÑоÑÑй в оÑÑалÑном поддеÑживаеÑÑÑ Ð¿Ð»Ð°Ð½Ð¸ÑовÑиком, пÑи ÑÑловии, ÑÑо он безопаÑен Ð´Ð»Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð² паÑаллелÑном иÑполниÑеле. ÐапÑимеÑ, ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑканиÑование индекÑа, пÑи коÑоÑом Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ Ð·Ð½Ð°Ñение, взÑÑое из внеÑней ÑÑоÑÐ¾Ð½Ñ ÑоединениÑ. ÐаждÑй ÑабоÑий пÑоÑеÑÑ Ð±ÑÐ´ÐµÑ Ð²ÑполнÑÑÑ Ð²Ð½ÑÑÑеннÑÑ ÑÑоÑÐ¾Ð½Ñ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð² полном обÑÑме, ÑÑо Ð´Ð»Ñ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾ Ñ ÐµÑÑ Ð¾Ð·Ð½Ð°ÑаеÑ, ÑÑо в каждом ÑабоÑем пÑоÑеÑÑе бÑÐ´ÐµÑ ÑÑÑоиÑÑÑÑ Ð¾Ð´Ð½Ð° и Ñа же Ñ ÐµÑ-ÑаблиÑа.
15.3.3. ÐаÑаллелÑное агÑегиÑование
Postgres Pro поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð¿Ð°ÑаллелÑное агÑегиÑование, вÑполнÑÑ Ð°Ð³ÑегиÑование в два ÑÑапа. СнаÑала каждÑй пÑоÑеÑÑ, задейÑÑвованнÑй в паÑаллелÑной ÑаÑÑи запÑоÑа, вÑполнÑÐµÑ Ñаг агÑегиÑованиÑ, вÑÐ´Ð°Ð²Ð°Ñ ÑаÑÑиÑнÑй ÑезÑлÑÑÐ°Ñ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ извеÑÑной ÐµÐ¼Ñ Ð³ÑÑппÑ. Рплане ÑÑо оÑÑÐ°Ð¶Ð°ÐµÑ Ñзел Partial Aggregate. ÐаÑем ÑÑи пÑомежÑÑоÑнÑе ÑезÑлÑÑаÑÑ Ð¿ÐµÑедаÑÑÑÑ Ð²ÐµÐ´ÑÑÐµÐ¼Ñ ÑеÑез Ñзел Gather. РнаконеÑ, ведÑÑий заново агÑегиÑÑÐµÑ ÑезÑлÑÑаÑÑ Ð²ÑеÑ
ÑабоÑиÑ
пÑоÑеÑÑов, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¾ÐºÐ¾Ð½ÑаÑелÑнÑй ÑезÑлÑÑаÑ. ÐÑо оÑÑÐ°Ð¶Ð°ÐµÑ Ð² плане Ñзел Finalize Aggregate.
Так как Ñзел Finalize Aggregate вÑполнÑеÑÑÑ Ð² ведÑÑем пÑоÑеÑÑе, запÑоÑÑ, вÑдаÑÑие доÑÑаÑоÑно болÑÑое колиÑеÑÑво гÑÑпп по оÑноÑÐµÐ½Ð¸Ñ Ðº ÑиÑÐ»Ñ Ð²Ñ
однÑÑ
ÑÑÑок, бÑдÑÑ ÑаÑÑениваÑÑÑÑ Ð¿Ð»Ð°Ð½Ð¸ÑовÑиком как менее пÑедпоÑÑиÑелÑнÑе. ÐапÑимеÑ, в Ñ
ÑдÑем ÑлÑÑае колиÑеÑÑво гÑÑпп, вÑÑвленнÑÑ
Ñзлом Finalize Aggregate, Ð¼Ð¾Ð¶ÐµÑ ÑавнÑÑÑÑÑ ÑиÑÐ»Ñ Ð²Ñ
однÑÑ
ÑÑÑок, обÑабоÑаннÑÑ
вÑеми ÑабоÑими пÑоÑеÑÑами на ÑÑапе Partial Aggregate. ÐÑевидно, ÑÑо в Ñакой ÑиÑÑаÑии иÑполÑзование паÑаллелÑного агÑегиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð½Ðµ даÑÑ Ð½Ð¸ÐºÐ°ÐºÐ¾Ð³Ð¾ вÑигÑÑÑа пÑоизводиÑелÑноÑÑи. ÐланиÑовÑик запÑоÑов ÑÑиÑÑÐ²Ð°ÐµÑ ÑÑо в пÑоÑеÑÑе планиÑованиÑ, Ñак ÑÑо вÑÐ±Ð¾Ñ Ð¿Ð°ÑаллелÑного агÑегиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð² подобнÑÑ
ÑлÑÑаÑÑ
оÑÐµÐ½Ñ Ð¼Ð°Ð»Ð¾Ð²ÐµÑоÑÑен.
ÐаÑаллелÑное агÑегиÑование поддеÑживаеÑÑÑ Ð½Ðµ во вÑеÑ
ÑлÑÑаÑÑ
. ЧÑÐ¾Ð±Ñ Ð¾Ð½Ð¾ поддеÑживалоÑÑ, агÑегаÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° бÑÑÑ Ð±ÐµÐ·Ð¾Ð¿Ð°Ñной Ð´Ð»Ñ ÑаÑпаÑÐ°Ð»Ð»ÐµÐ»Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¸ должна имеÑÑ ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð¸ÑÑÑÑÑÑ ÑÑнкÑиÑ. ÐÑли пеÑеÑ
одное ÑоÑÑоÑние агÑегаÑной ÑÑнкÑии Ð¸Ð¼ÐµÐµÑ Ñип internal, она должна Ñакже имеÑÑ ÑÑнкÑии ÑеÑиализаÑии и деÑеÑиализаÑии. Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº CREATE AGGREGATE. ÐаÑаллелÑное агÑегиÑование не поддеÑживаеÑÑÑ, еÑли вÑзов агÑегаÑной ÑÑнкÑии ÑодеÑÐ¶Ð¸Ñ Ð¿Ñедложение DISTINCT или ORDER BY. Также оно не поддеÑживаеÑÑÑ Ð´Ð»Ñ ÑоÑÑиÑÑÑÑиÑ
агÑегаÑов или когда запÑÐ¾Ñ Ð²ÐºÐ»ÑÑÐ°ÐµÑ Ð¿Ñедложение GROUPING SETS. Ðно Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ ÑолÑко когда вÑе ÑоединениÑ, задейÑÑвованнÑе в запÑоÑе, Ñакже вÑ
одÑÑ Ð² паÑаллелÑнÑÑ ÑаÑÑÑ Ð¿Ð»Ð°Ð½Ð°.
15.3.4. СовеÑÑ Ð¿Ð¾ паÑаллелÑнÑм планам
ÐÑли Ð´Ð»Ñ Ð·Ð°Ð¿ÑоÑа ожидаеÑÑÑ Ð¿Ð°ÑаллелÑнÑй план, но Ñакой план не ÑÑÑоиÑÑÑ, можно попÑÑаÑÑÑÑ ÑменÑÑиÑÑ parallel_setup_cost или parallel_tuple_cost. РазÑмееÑÑÑ, ÑÑÐ¾Ñ Ð¿Ð»Ð°Ð½ Ð¼Ð¾Ð¶ÐµÑ Ð¾ÐºÐ°Ð·Ð°ÑÑÑÑ Ð¼ÐµÐ´Ð»ÐµÐ½Ð½ÐµÐµ поÑледоваÑелÑного плана, пÑедпоÑиÑаемого планиÑовÑиком, но не вÑегда. ÐÑли Ð²Ñ Ð½Ðµ полÑÑаеÑе паÑаллелÑнÑй план даже Ñ Ð¾ÑÐµÐ½Ñ Ð¼Ð°Ð»ÐµÐ½Ñкими знаÑениÑми ÑÑÐ¸Ñ Ð¿Ð°ÑамеÑÑов (напÑимеÑ, ÑбÑоÑив оба Ð¸Ñ Ð² нолÑ), Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÐºÐ°ÐºÐ°Ñ-Ñо веÑÐºÐ°Ñ Ð¿ÑиÑина ÑомÑ, ÑÑо планиÑовÑик запÑоÑов не Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾ÑÑÑоиÑÑ Ð¿Ð°ÑаллелÑнÑй план Ð´Ð»Ñ Ð²Ð°Ñего запÑоÑа. Ðа инÑоÑмаÑией о возможнÑÑ Ð¿ÑиÑÐ¸Ð½Ð°Ñ Ð¾Ð±ÑаÑиÑеÑÑ Ðº РазделÑ 15.2 и РазделÑ 15.4.
Ðогда вÑполнÑеÑÑÑ Ð¿Ð°ÑаллелÑнÑй план, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе пÑимениÑÑ EXPLAIN (ANALYZE, VERBOSE), ÑÑÐ¾Ð±Ñ Ð¿ÑоÑмоÑÑеÑÑ ÑÑаÑиÑÑÐ¸ÐºÑ Ð¿Ð¾ ÐºÐ°Ð¶Ð´Ð¾Ð¼Ñ ÑÐ·Ð»Ñ Ð¿Ð»Ð°Ð½Ð° в ÑазÑезе ÑабоÑиÑ
пÑоÑеÑÑов. ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð¼Ð¾ÑÑ Ð¾Ð¿ÑеделиÑÑ, ÑавномеÑно ли ÑаÑпÑеделÑеÑÑÑ ÑабоÑа Ð¼ÐµÐ¶Ð´Ñ Ð²Ñеми Ñзлами плана, и на более обÑем ÑÑовне понимаÑÑ Ñ
аÑакÑеÑиÑÑики пÑоизводиÑелÑноÑÑи плана.