20.7. ÐланиÑование запÑоÑов #
20.7.1. ÐонÑигÑÑаÑÐ¸Ñ Ð¼ÐµÑодов планиÑовÑика #
ÐÑи паÑамеÑÑÑ ÐºÐ¾Ð½ÑигÑÑаÑии даÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð³ÑÑбо влиÑÑÑ Ð½Ð° планÑ, вÑбиÑаемÑе опÑимизаÑоÑом запÑоÑов. ÐÑли авÑомаÑиÑеÑки вÑбÑаннÑй опÑимизаÑоÑом план конкÑеÑного запÑоÑа оказалÑÑ Ð½ÐµÐ¾Ð¿ÑималÑнÑм, в каÑеÑÑве вÑеменного ÑеÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ воÑполÑзоваÑÑÑÑ Ð¾Ð´Ð½Ð¸Ð¼ из ÑÑиÑ
паÑамеÑÑов и вÑнÑдиÑÑ Ð¿Ð»Ð°Ð½Ð¸ÑовÑик вÑбÑаÑÑ Ð´ÑÑгой план. УлÑÑÑиÑÑ ÐºÐ°ÑеÑÑво планов, вÑбиÑаемÑÑ
планиÑовÑиком, можно и более подÑ
одÑÑими ÑпоÑобами, в ÑаÑÑноÑÑи, ÑкоÑÑекÑиÑоваÑÑ ÐºÐ¾Ð½ÑÑанÑÑ ÑÑоимоÑÑи (Ñм. ÐодÑаздел 20.7.2), вÑполниÑÑ ANALYZE вÑÑÑнÑÑ, ÑвелиÑиÑÑ Ð·Ð½Ð°Ñение паÑамеÑÑа конÑигÑÑаÑии default_statistics_target и ÑвелиÑиÑÑ Ð¾Ð±ÑÑм ÑÑаÑиÑÑики, ÑобиÑаемой Ð´Ð»Ñ Ð¾ÑделÑнÑÑ
ÑÑолбÑов, воÑполÑзовавÑиÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ ALTER TABLE SET STATISTICS.
enable_async_append(boolean) #ÐклÑÑÐ°ÐµÑ Ð¸Ð»Ð¸ оÑклÑÑÐ°ÐµÑ Ð¸ÑполÑзование планиÑовÑиком планов Ñ Ð°ÑÐ¸Ð½Ñ ÑоннÑм добавлением даннÑÑ . Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение
on(вкл.).enable_bitmapscan(boolean) #ÐклÑÑÐ°ÐµÑ Ð¸Ð»Ð¸ оÑклÑÑÐ°ÐµÑ Ð¸ÑполÑзование планов ÑканиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾ биÑовой каÑÑе. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение
on(вкл.).enable_gathermerge(boolean) #ÐклÑÑÐ°ÐµÑ Ð¸Ð»Ð¸ оÑклÑÑÐ°ÐµÑ Ð¸ÑполÑзование планов ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾ÑÑедÑÑвом ÑбоÑа. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение
on(вкл.).enable_hashagg(boolean) #ÐклÑÑÐ°ÐµÑ Ð¸Ð»Ð¸ оÑклÑÑÐ°ÐµÑ Ð¸ÑполÑзование планов агÑегиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾ Ñ ÐµÑÑ. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение
on(вкл.).enable_hashjoin(boolean) #ÐклÑÑÐ°ÐµÑ Ð¸Ð»Ð¸ оÑклÑÑÐ°ÐµÑ Ð¸ÑполÑзование планов ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾ Ñ ÐµÑÑ. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение
on(вкл.).enable_incremental_sort(boolean) #ÐклÑÑÐ°ÐµÑ Ð¸Ð»Ð¸ оÑклÑÑÐ°ÐµÑ Ð¸ÑполÑзование планиÑовÑиком инкÑеменÑалÑной ÑоÑÑиÑовки. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение
on(вкл.).enable_indexscan(boolean) #ÐклÑÑÐ°ÐµÑ Ð¸Ð»Ð¸ оÑклÑÑÐ°ÐµÑ Ð¸ÑполÑзование планов ÑканиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð½Ð´ÐµÐºÑа и ÑканиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑолÑко индекÑа. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение
on(вкл.). См. Ñакже enable_indexonlyscan.enable_indexonlyscan(boolean) #ÐклÑÑÐ°ÐµÑ Ð¸Ð»Ð¸ оÑклÑÑÐ°ÐµÑ Ð¸ÑполÑзование планов ÑканиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑолÑко индекÑа (Ñм. Раздел 11.9). Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение
on(вкл.). ЧÑÐ¾Ð±Ñ Ð¸ÑполÑзоваÑÑ Ð¿Ð»Ð°Ð½Ñ ÑканиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑолÑко индекÑа, Ñакже должен бÑÑÑ Ð²ÐºÐ»ÑÑÑн паÑамеÑÑ enable_indexscan.enable_material(boolean) #ÐклÑÑÐ°ÐµÑ Ð¸Ð»Ð¸ оÑклÑÑÐ°ÐµÑ Ð¸ÑполÑзование маÑеÑиализаÑии пÑи планиÑовании запÑоÑов. ÐолноÑÑÑÑ Ð¸ÑклÑÑиÑÑ Ð¼Ð°ÑеÑиализаÑÐ¸Ñ Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾, но пÑи вÑклÑÑении ÑÑого паÑамеÑÑа планиÑовÑик не бÑÐ´ÐµÑ Ð²ÑÑавлÑÑÑ ÑÐ·Ð»Ñ Ð¼Ð°ÑеÑиализаÑии, за иÑклÑÑением ÑлÑÑаев, где они ÑÑебÑÑÑÑÑ Ð´Ð»Ñ Ð¿ÑавилÑноÑÑи. Ðо ÑмолÑÐ°Ð½Ð¸Ñ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение
on(вкл.).enable_memoize(boolean) #ÐклÑÑÐ°ÐµÑ Ð¸Ð»Ð¸ оÑклÑÑÐ°ÐµÑ Ð¸ÑполÑзование планиÑовÑиком планов Ñ Ð¼ÐµÐ¼Ð¾Ð¸Ð·Ð°Ñией Ð´Ð»Ñ ÐºÐµÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑезÑлÑÑаÑов паÑамеÑÑизованного ÑканиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð½ÑÑÑи Ñоединений вложеннÑм Ñиклом. ÐÑÐ¾Ñ Ñип плана позволÑÐµÑ Ð¿ÑопÑÑкаÑÑ ÑканиÑование нижележаÑÐ¸Ñ Ð¿Ð»Ð°Ð½Ð¾Ð², когда ÑезÑлÑÑаÑÑ, ÑооÑвеÑÑÑвÑÑÑие ÑекÑÑим паÑамеÑÑам, Ñже Ð½Ð°Ñ Ð¾Ð´ÑÑÑÑ Ð² кеÑе. Ðенее воÑÑÑебованнÑе ÑезÑлÑÑаÑÑ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ ÑÐ´Ð°Ð»ÐµÐ½Ñ Ð¸Ð· кеÑа, когда ÑÑебÑеÑÑÑ Ð±Ð¾Ð»ÑÑе меÑÑа Ð´Ð»Ñ Ð½Ð¾Ð²ÑÑ Ð·Ð°Ð¿Ð¸Ñей. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение
on(вкл.).enable_mergejoin(boolean) #ÐклÑÑÐ°ÐµÑ Ð¸Ð»Ð¸ оÑклÑÑÐ°ÐµÑ Ð¸ÑполÑзование планов ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ ÑлиÑнием. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение
on(вкл.).enable_nestloop(boolean) #ÐклÑÑÐ°ÐµÑ Ð¸Ð»Ð¸ оÑклÑÑÐ°ÐµÑ Ð¸ÑполÑзование планиÑовÑиком планов ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ñми Ñиклами. ÐолноÑÑÑÑ Ð¸ÑклÑÑиÑÑ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ñе ÑÐ¸ÐºÐ»Ñ Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾, но пÑи вÑклÑÑении ÑÑого паÑамеÑÑа планиÑовÑик не бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑ Ð´Ð°Ð½Ð½Ñй меÑод, еÑли можно пÑимениÑÑ Ð´ÑÑгие. Ðо ÑмолÑÐ°Ð½Ð¸Ñ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение
on.enable_parallel_append(boolean) #ÐклÑÑÐ°ÐµÑ Ð¸Ð»Ð¸ оÑклÑÑÐ°ÐµÑ Ð¸ÑполÑзование планиÑовÑиком планов Ñ ÑаÑпаÑаллеливанием Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ . Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение
on(вкл.).enable_parallel_hash(boolean) #ÐклÑÑÐ°ÐµÑ Ð¸Ð»Ð¸ оÑклÑÑÐ°ÐµÑ Ð¸ÑполÑзование планиÑовÑиком планов ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾ Ñ ÐµÑÑ Ñ ÑаÑпаÑаллеливанием Ñ ÐµÑиÑованиÑ. Ðе дейÑÑвÑеÑ, еÑли Ð¿Ð»Ð°Ð½Ñ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾ Ñ ÐµÑÑ Ð¾ÑклÑÑенÑ. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение
on(вкл.).enable_partition_pruning(boolean) #ÐклÑÑÐ°ÐµÑ Ð¸Ð»Ð¸ оÑклÑÑÐ°ÐµÑ Ð² планиÑовÑике возможноÑÑÑ Ð¾ÑÑекаÑÑ ÑекÑии ÑекÑиониÑованнÑÑ ÑÐ°Ð±Ð»Ð¸Ñ Ð¸Ð· планов запÑоÑа. Также влиÑÐµÑ Ð½Ð° возможноÑÑÑ Ð¿Ð»Ð°Ð½Ð¸ÑовÑика генеÑиÑоваÑÑ Ð¿Ð»Ð°Ð½Ñ Ð·Ð°Ð¿ÑоÑов, позволÑÑÑие иÑполниÑÐµÐ»Ñ Ð¿ÑопÑÑкаÑÑ (игноÑиÑоваÑÑ) ÑекÑии пÑи вÑполнении запÑоÑов. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение
on(вкл.). Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº ÐодÑазделÑ 5.11.4.enable_partitionwise_join(boolean) #ÐклÑÑÐ°ÐµÑ Ð¸Ð»Ð¸ оÑклÑÑÐ°ÐµÑ Ð¸ÑполÑзование планиÑовÑиком ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñ ÑÑÑÑом ÑекÑиониÑованиÑ, ÑÑо позволÑÐµÑ Ð²ÑполнÑÑÑ Ñоединение ÑекÑиониÑованнÑÑ ÑÐ°Ð±Ð»Ð¸Ñ Ð¿ÑÑÑм ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ ÑооÑвеÑÑÑвÑÑÑÐ¸Ñ ÑекÑий. Соединение Ñ ÑÑÑÑом ÑекÑиониÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð² наÑÑоÑÑее вÑÐµÐ¼Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑименÑÑÑÑÑ, ÑолÑко когда ÑÑÐ»Ð¾Ð²Ð¸Ñ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð²ÐºÐ»ÑÑаÑÑ Ð²Ñе клÑÑи ÑекÑиониÑованиÑ; пÑи ÑÑом клÑÑи Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ñипа даннÑÑ Ð¸ доÑеÑние ÑекÑии Ð´Ð¾Ð»Ð¶Ð½Ñ ÑооÑвеÑÑÑвоваÑÑ Ð¾Ð´Ð¸Ð½-к-одномÑ. ÐÑли ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð²ÐºÐ»ÑÑÑн, колиÑеÑÑво Ñзлов, иÑполÑзование памÑÑи коÑоÑÑÑ Ð¾Ð³ÑаниÑено паÑамеÑÑом
work_mem, ÑказаннÑм в оконÑаÑелÑном плане, Ð¼Ð¾Ð¶ÐµÑ Ð»Ð¸Ð½ÐµÐ¹Ð½Ð¾ ÑвелиÑиваÑÑÑÑ Ð² ÑооÑвеÑÑÑвии Ñ ÐºÐ¾Ð»Ð¸ÑеÑÑвом ÑканиÑÑемÑÑ ÑекÑий. ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑивеÑÑи к знаÑиÑелÑÐ½Ð¾Ð¼Ñ ÑвелиÑÐµÐ½Ð¸Ñ Ð¾Ð±Ñего поÑÑÐµÐ±Ð»ÐµÐ½Ð¸Ñ Ð¿Ð°Ð¼ÑÑи во вÑÐµÐ¼Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑоÑа. ÐÐ»Ñ Ð¿Ð»Ð°Ð½Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð·Ð°Ð¿ÑоÑов Ñакже ÑÑановиÑÑÑ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ гоÑаздо болÑÑе пÑоÑеÑÑоÑного вÑемени и памÑÑи. Ðо ÑмолÑÐ°Ð½Ð¸Ñ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð²ÑклÑÑен (off).enable_partitionwise_aggregate(boolean) #ÐклÑÑÐ°ÐµÑ Ð¸Ð»Ð¸ оÑклÑÑÐ°ÐµÑ Ð¸ÑполÑзование планиÑовÑиком гÑÑппиÑовки или агÑегиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ñ ÑÑÑÑом ÑекÑиониÑованиÑ, ÑÑо позволÑÐµÑ Ð²ÑполнÑÑÑ Ð³ÑÑппиÑÐ¾Ð²ÐºÑ Ð¸Ð»Ð¸ агÑегиÑование в ÑекÑиониÑованнÑÑ ÑаблиÑÐ°Ñ Ð¿Ð¾ оÑделÑноÑÑи Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ ÑекÑии. ÐÑли пÑедложение
GROUP BYне вклÑÑÐ°ÐµÑ ÐºÐ»ÑÑи ÑекÑиониÑованиÑ, на ÑÑовне ÑекÑий Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð²Ñполнено ÑолÑко ÑаÑÑиÑное агÑегиÑование, а заÑем ÑÑебÑеÑÑÑ Ð¸ÑÐ¾Ð³Ð¾Ð²Ð°Ñ Ð¾Ð±ÑабоÑка. ÐÑли ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð²ÐºÐ»ÑÑÑн, колиÑеÑÑво Ñзлов, иÑполÑзование памÑÑи коÑоÑÑÑ Ð¾Ð³ÑаниÑено паÑамеÑÑомwork_mem, ÑказаннÑм в оконÑаÑелÑном плане, Ð¼Ð¾Ð¶ÐµÑ Ð»Ð¸Ð½ÐµÐ¹Ð½Ð¾ ÑвелиÑиваÑÑÑÑ Ð² ÑооÑвеÑÑÑвии Ñ ÐºÐ¾Ð»Ð¸ÑеÑÑвом ÑканиÑÑемÑÑ ÑекÑий. ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑивеÑÑи к знаÑиÑелÑÐ½Ð¾Ð¼Ñ ÑвелиÑÐµÐ½Ð¸Ñ Ð¾Ð±Ñего поÑÑÐµÐ±Ð»ÐµÐ½Ð¸Ñ Ð¿Ð°Ð¼ÑÑи во вÑÐµÐ¼Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑоÑа. ÐÐ»Ñ Ð¿Ð»Ð°Ð½Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð·Ð°Ð¿ÑоÑов Ñакже ÑÑановиÑÑÑ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ гоÑаздо болÑÑе пÑоÑеÑÑоÑного вÑемени и памÑÑи. Ðо ÑмолÑÐ°Ð½Ð¸Ñ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð²ÑклÑÑен (off).enable_presorted_aggregate(boolean) #ÐпÑеделÑеÑ, бÑÐ´ÐµÑ Ð»Ð¸ планиÑовÑик запÑоÑов ÑоздаваÑÑ Ð¿Ð»Ð°Ð½, в коÑоÑом ÑÑÑоки пÑедваÑиÑелÑно оÑÑоÑÑиÑÐ¾Ð²Ð°Ð½Ñ Ð² поÑÑдке, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾Ð¼ Ð´Ð»Ñ Ð°Ð³ÑегаÑнÑÑ ÑÑнкÑий запÑоÑа Ñ Ð¿ÑедложениÑми
ORDER BY/DISTINCT. ÐÑли ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¾ÑклÑÑÑн, планиÑовÑик запÑоÑов бÑÐ´ÐµÑ ÑоздаваÑÑ Ð¿Ð»Ð°Ð½, коÑоÑÑй вÑегда бÑÐ´ÐµÑ ÑÑебоваÑÑ Ð¾Ñ Ð¸ÑполниÑÐµÐ»Ñ Ð²ÑполнÑÑÑ ÑоÑÑиÑÐ¾Ð²ÐºÑ Ð¿ÐµÑед вÑзовом каждой агÑегаÑной ÑÑнкÑии Ñ Ð¿ÑедложениÑмиORDER BYилиDISTINCT. Ðогда ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð²ÐºÐ»ÑÑÑн, планиÑовÑик пÑÑаеÑÑÑ ÑоздаÑÑ Ð±Ð¾Ð»ÐµÐµ ÑÑÑекÑивнÑй план, пÑедоÑÑавлÑÑÑий Ð²Ñ Ð¾Ð´Ð½Ñе даннÑе Ð´Ð»Ñ Ð°Ð³ÑегаÑнÑÑ ÑÑнкÑий, коÑоÑÑе пÑедваÑиÑелÑно оÑÑоÑÑиÑÐ¾Ð²Ð°Ð½Ñ Ð² Ñом поÑÑдке, коÑоÑÑй они ÑÑебÑÑÑ Ð´Ð»Ñ Ð°Ð³ÑегиÑованиÑ. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ âon.enable_seqscan(boolean) #ÐклÑÑÐ°ÐµÑ Ð¸Ð»Ð¸ оÑклÑÑÐ°ÐµÑ Ð¸ÑполÑзование планиÑовÑиком планов поÑледоваÑелÑного ÑканиÑованиÑ. ÐолноÑÑÑÑ Ð¸ÑклÑÑиÑÑ Ð¿Ð¾ÑледоваÑелÑное ÑканиÑование невозможно, но пÑи вÑклÑÑении ÑÑого паÑамеÑÑа планиÑовÑик не бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑ Ð´Ð°Ð½Ð½Ñй меÑод, еÑли можно пÑимениÑÑ Ð´ÑÑгие. Ðо ÑмолÑÐ°Ð½Ð¸Ñ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение
on.enable_sort(boolean) #ÐклÑÑÐ°ÐµÑ Ð¸Ð»Ð¸ оÑклÑÑÐ°ÐµÑ Ð¸ÑполÑзование планиÑовÑиком Ñагов Ñ Ñвной ÑоÑÑиÑовкой. ÐолноÑÑÑÑ Ð¸ÑклÑÑиÑÑ ÑвнÑÑ ÑоÑÑиÑÐ¾Ð²ÐºÑ Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾, но пÑи вÑклÑÑении ÑÑого паÑамеÑÑа планиÑовÑик не бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑ Ð´Ð°Ð½Ð½Ñй меÑод, еÑли можно пÑимениÑÑ Ð´ÑÑгие. Ðо ÑмолÑÐ°Ð½Ð¸Ñ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение
on.enable_tidscan(boolean) #ÐклÑÑÐ°ÐµÑ Ð¸Ð»Ð¸ оÑклÑÑÐ°ÐµÑ Ð¸ÑполÑзование планов ÑканиÑÐ¾Ð²Ð°Ð½Ð¸Ñ TID. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение
on(вкл.).
20.7.2. ÐонÑÑанÑÑ ÑÑоимоÑÑи Ð´Ð»Ñ Ð¿Ð»Ð°Ð½Ð¸ÑовÑика #
ÐеÑеменнÑе ÑÑоимоÑÑи, опиÑаннÑе в данном Ñазделе, задаÑÑÑÑ Ð¿Ð¾ пÑоизволÑной Ñкале. ÐнаÑение имеÑÑ ÑолÑко иÑ
оÑноÑениÑ, поÑÑÐ¾Ð¼Ñ Ñмножение или деление вÑеÑ
пеÑеменнÑÑ
на один коÑÑÑиÑÐ¸ÐµÐ½Ñ Ð½Ð¸ÐºÐ°Ðº не повлиÑÐµÑ Ð½Ð° вÑÐ±Ð¾Ñ Ð¿Ð»Ð°Ð½Ð¸ÑовÑика. Ðо ÑмолÑÐ°Ð½Ð¸Ñ ÑÑи пеÑеменнÑе опÑеделÑÑÑÑÑ Ð¾ÑноÑиÑелÑно ÑÑоимоÑÑи ÑÑÐµÐ½Ð¸Ñ Ð¿Ð¾ÑледоваÑелÑной ÑÑÑаниÑÑ: Ñо еÑÑÑ, пеÑеменнÑÑ seq_page_cost Ñдобно задаÑÑ Ñавной 1.0, а вÑе дÑÑгие пеÑеменнÑе ÑÑоимоÑÑи опÑеделиÑÑ Ð¾ÑноÑиÑелÑно неÑ. Ðо пÑи желании можно иÑполÑзоваÑÑ Ð¸ дÑÑгÑÑ ÑкалÑ, напÑимеÑ, вÑÑазиÑÑ Ð² миллиÑекÑндаÑ
ÑакÑиÑеÑкое вÑÐµÐ¼Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑоÑов на конкÑеÑной маÑине.
ÐÑимеÑание
Ð ÑожалениÑ, какого-либо ÑÑÑко опÑеделÑнного ÑпоÑоба опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¸Ð´ÐµÐ°Ð»ÑнÑÑ Ð·Ð½Ð°Ñений ÑÑоимоÑÑи не ÑÑÑеÑÑвÑеÑ. ÐÑÑÑе вÑего вÑбиÑаÑÑ Ð¸Ñ ÐºÐ°Ðº ÑÑедние показаÑели пÑи вÑполнении Ñелого ÑÑда ÑазнообÑазнÑÑ Ð·Ð°Ð¿ÑоÑов, коÑоÑÑе бÑÐ´ÐµÑ Ð¾Ð±ÑабаÑÑваÑÑ ÐºÐ¾Ð½ÐºÑеÑÐ½Ð°Ñ Ð¡Ð£ÐÐ. ÐÑо знаÑиÑ, ÑÑо менÑÑÑ Ð¸Ñ Ð¿Ð¾ ÑезÑлÑÑаÑам вÑего неÑколÑÐºÐ¸Ñ ÑкÑпеÑименÑов оÑÐµÐ½Ñ ÑиÑкованно.
seq_page_cost(floating point) #ÐадаÑÑ Ð¿ÑиблизиÑелÑнÑÑ ÑÑоимоÑÑÑ ÑÑÐµÐ½Ð¸Ñ Ð¾Ð´Ð½Ð¾Ð¹ ÑÑÑаниÑÑ Ñ Ð´Ð¸Ñка, коÑоÑое вÑполнÑеÑÑÑ Ð² ÑеÑии поÑледоваÑелÑнÑÑ ÑÑений. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ Ñавно 1.0. ÐÑо знаÑение можно пеÑеопÑеделиÑÑ Ð´Ð»Ñ ÑÐ°Ð±Ð»Ð¸Ñ Ð¸ индекÑов в опÑеделÑнном ÑаблиÑном пÑоÑÑÑанÑÑве, ÑÑÑановив одноимÑннÑй паÑамеÑÑ ÑаблиÑного пÑоÑÑÑанÑÑва (Ñм. ALTER TABLESPACE).
random_page_cost(floating point) #ÐадаÑÑ Ð¿ÑиблизиÑелÑнÑÑ ÑÑоимоÑÑÑ ÑÑÐµÐ½Ð¸Ñ Ð¾Ð´Ð½Ð¾Ð¹ пÑоизволÑной ÑÑÑаниÑÑ Ñ Ð´Ð¸Ñка. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ Ñавно 4.0. ÐÑо знаÑение можно пеÑеопÑеделиÑÑ Ð´Ð»Ñ ÑÐ°Ð±Ð»Ð¸Ñ Ð¸ индекÑов в опÑеделÑнном ÑаблиÑном пÑоÑÑÑанÑÑве, ÑÑÑановив одноимÑннÑй паÑамеÑÑ ÑаблиÑного пÑоÑÑÑанÑÑва (Ñм. ALTER TABLESPACE).
ÐÑи ÑменÑÑении ÑÑого знаÑÐµÐ½Ð¸Ñ Ð¿Ð¾ оÑноÑÐµÐ½Ð¸Ñ Ðº
seq_page_costÑиÑÑема наÑÐ¸Ð½Ð°ÐµÑ Ð¿ÑедпоÑиÑаÑÑ ÑканиÑование по индекÑÑ; пÑи ÑвелиÑении Ñакое ÑканиÑование ÑÑановиÑÑÑ Ð±Ð¾Ð»ÐµÐµ доÑогоÑÑоÑÑим. Ðба ÑÑи знаÑÐµÐ½Ð¸Ñ Ñакже можно ÑвелиÑиÑÑ Ð¸Ð»Ð¸ ÑменÑÑиÑÑ Ð¾Ð´Ð½Ð¾Ð²Ñеменно, ÑÑÐ¾Ð±Ñ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑ ÑÑоимоÑÑÑ Ð¾Ð¿ÐµÑаÑий ввода-вÑвода по оÑноÑÐµÐ½Ð¸Ñ Ðº ÑÑоимоÑÑи пÑоÑеÑÑоÑнÑÑ Ð¾Ð¿ÐµÑаÑий, коÑоÑÐ°Ñ Ð¾Ð¿ÑеделÑеÑÑÑ ÑледÑÑÑими паÑамеÑÑами.ÐÑоизволÑнÑй доÑÑÑп к надÑÐ¶Ð½Ð¾Ð¼Ñ Ñ ÑанилиÑÑ Ð¾Ð±ÑÑно гоÑаздо доÑоже поÑледоваÑелÑного доÑÑÑпа, более Ñем в ÑеÑÑÑе Ñаза. Ðднако по ÑмолÑÐ°Ð½Ð¸Ñ Ð²ÑбÑан неболÑÑой коÑÑÑиÑÐ¸ÐµÐ½Ñ (4.0) в пÑедположении, ÑÑо болÑÑой обÑÑм даннÑÑ Ð¿Ñи пÑоизволÑном доÑÑÑпе, напÑимеÑ, пÑи ÑÑении индекÑа, окажеÑÑÑ Ð² кеÑе. ÐÑоме Ñого, задеÑжка в ÑабоÑе ÑеÑевого ÑÑÑÑойÑÑва Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð¾Ð±ÑÑно ÑÐ½Ð¸Ð¶Ð°ÐµÑ Ð¾ÑноÑиÑелÑнÑе накладнÑе ÑаÑÑ Ð¾Ð´Ñ Ð¿Ñи пÑоизволÑном доÑÑÑпе.
ÐÑли Ð²Ñ ÑÑиÑаеÑе, ÑÑо кеÑиÑование пÑоиÑÑ Ð¾Ð´Ð¸Ñ Ñеже, Ñем оÑÑажено в знаÑении по ÑмолÑаниÑ, а задеÑжка в ÑеÑи минималÑна, можно ÑвелиÑиÑÑ Ð·Ð½Ð°Ñение пеÑеменной
random_page_cost, ÑÑÐ¾Ð±Ñ ÑоÑнее оÑÑазиÑÑ ÑеалÑнÑÑ ÑÑоимоÑÑÑ Ð¿ÑоизволÑного ÑÑÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ Ð¸Ð· Ñ ÑанилиÑа. ÐÐ»Ñ Ñ ÑанилиÑа, Ñ ÐºÐ¾ÑоÑого ÑÑоимоÑÑÑ Ð¿ÑоизволÑного ÑÑÐµÐ½Ð¸Ñ Ð²ÑÑе поÑледоваÑелÑного, как, напÑимеÑ, Ñ Ð½Ð°ÐºÐ¾Ð¿Ð¸Ñелей на магниÑнÑÑ Ð´Ð¸ÑÐºÐ°Ñ , Ñак же лÑÑÑе задаÑÑ Ð±Ð¾Ð»ÐµÐµ вÑÑокое знаÑениеrandom_page_cost. РнапÑоÑив, еÑли даннÑе могÑÑ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ Ð¿Ð¾Ð¼ÐµÑÑиÑÑÑÑ Ð² кеÑе, напÑимеÑ, когда ÑÐ°Ð·Ð¼ÐµÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ð¼ÐµÐ½ÑÑе обÑего обÑÑма памÑÑи ÑеÑвеÑа, или пÑи вÑÑокой задеÑжке в ÑеÑи, Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð¼ÐµÑÑ ÑмÑÑл ÑменÑÑиÑÑ Ð·Ð½Ð°Ñениеrandom_page_cost.ÐодÑказка
ХоÑÑ ÑиÑÑема позволÑÐµÑ ÑделаÑÑ
random_page_costменÑÑе, Ñемseq_page_cost, ÑÑо лиÑено ÑизиÑеÑкого ÑмÑÑла. Ðднако ÑделаÑÑ Ð¸Ñ ÑавнÑми Ð¸Ð¼ÐµÐµÑ ÑмÑÑл, еÑли база даннÑÑ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ ÐºÐµÑиÑÑеÑÑÑ Ð² ÐÐУ, Ñак как в ÑÑом ÑлÑÑае Ñ Ð¾Ð±ÑаÑением к ÑÑÑаниÑам в пÑоизволÑном поÑÑдке не ÑвÑÐ·Ð°Ð½Ñ Ð½Ð¸ÐºÐ°ÐºÐ¸Ðµ дополниÑелÑнÑе издеÑжки. ÐÑоме Ñого, Ð´Ð»Ñ ÑилÑно загÑÑженной Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ð¾Ð±Ð° ÑÑÐ¸Ñ Ð¿Ð°ÑамеÑÑа ÑледÑÐµÑ Ð¿Ð¾Ð½Ð¸Ð·Ð¸ÑÑ Ð¿Ð¾ оÑноÑÐµÐ½Ð¸Ñ Ðº ÑÑоимоÑÑи пÑоÑеÑÑоÑнÑÑ Ð¾Ð¿ÐµÑаÑий, Ñак как ÑÑоимоÑÑÑ Ð²ÑбоÑки ÑÑÑаниÑÑ, Ñже Ð½Ð°Ñ Ð¾Ð´ÑÑейÑÑ Ð² ÐÐУ, оказÑваеÑÑÑ Ð½Ð°Ð¼Ð½Ð¾Ð³Ð¾ менÑÑе, Ñем обÑÑно.cpu_tuple_cost(floating point) #ÐадаÑÑ Ð¿ÑиблизиÑелÑнÑÑ ÑÑоимоÑÑÑ Ð¾Ð±ÑабоÑки каждой ÑÑÑоки пÑи вÑполнении запÑоÑа. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â 0.01.
cpu_index_tuple_cost(floating point) #ÐадаÑÑ Ð¿ÑиблизиÑелÑнÑÑ ÑÑоимоÑÑÑ Ð¾Ð±ÑабоÑки каждой запиÑи индекÑа пÑи ÑканиÑовании индекÑа. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â 0.005.
cpu_operator_cost(floating point) #ÐадаÑÑ Ð¿ÑиблизиÑелÑнÑÑ ÑÑоимоÑÑÑ Ð¾Ð±ÑабоÑки опеÑаÑоÑа или ÑÑнкÑии пÑи вÑполнении запÑоÑа. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â 0.0025.
parallel_setup_cost(floating point) #ÐадаÑÑ Ð¿ÑиблизиÑелÑнÑÑ ÑÑоимоÑÑÑ Ð·Ð°Ð¿ÑÑка паÑаллелÑнÑÑ ÑабоÑÐ¸Ñ Ð¿ÑоÑеÑÑов. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â 1000.
parallel_tuple_cost(floating point) #ÐадаÑÑ Ð¿ÑиблизиÑелÑнÑÑ ÑÑоимоÑÑÑ Ð¿ÐµÑедаÑи одного коÑÑежа Ð¾Ñ Ð¿Ð°ÑаллелÑного ÑабоÑего пÑоÑеÑÑа дÑÑÐ³Ð¾Ð¼Ñ Ð¿ÑоÑеÑÑÑ. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â 0.1.
min_parallel_table_scan_size(integer) #ÐадаÑÑ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»ÑнÑй обÑÑм даннÑÑ ÑаблиÑÑ, подлежаÑий ÑканиÑованиÑ, пÑи коÑоÑом Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑименÑÑÑÑÑ Ð¿Ð°ÑаллелÑное ÑканиÑование. ÐÐ»Ñ Ð¿Ð°ÑаллелÑного поÑледоваÑелÑного ÑканиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ð±ÑÑм ÑканиÑÑемÑÑ Ð´Ð°Ð½Ð½ÑÑ Ð²Ñегда ÑавнÑеÑÑÑ ÑазмеÑÑ ÑаблиÑÑ, но когда иÑполÑзÑÑÑÑÑ Ð¸Ð½Ð´ÐµÐºÑÑ, ÑÑÐ¾Ñ Ð¾Ð±ÑÑм обÑÑно менÑÑе. ÐÑли ÑÑо знаÑение задаÑÑÑÑ Ð±ÐµÐ· ÐµÐ´Ð¸Ð½Ð¸Ñ Ð¸Ð·Ð¼ÐµÑениÑ, оно ÑÑиÑаеÑÑÑ Ð·Ð°Ð´Ð°Ð½Ð½Ñм в Ð±Ð»Ð¾ÐºÐ°Ñ (ÑÐ°Ð·Ð¼ÐµÑ ÐºÐ¾ÑоÑÑÑ Ñавен
BLCKSZбайÑ, обÑÑно ÑÑо 8 ÐÐ). ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â 8 Ð¼ÐµÐ³Ð°Ð±Ð°Ð¹Ñ (8MB).min_parallel_index_scan_size(integer) #ÐадаÑÑ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»ÑнÑй обÑÑм даннÑÑ Ð¸Ð½Ð´ÐµÐºÑа, подлежаÑий ÑканиÑованиÑ, пÑи коÑоÑом Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑименÑÑÑÑÑ Ð¿Ð°ÑаллелÑное ÑканиÑование. ÐамеÑÑÑе, ÑÑо пÑи паÑаллелÑном ÑканиÑовании по индекÑÑ Ð¾Ð±ÑÑно не заÑÑагиваеÑÑÑ Ð²ÐµÑÑ Ð¸Ð½Ð´ÐµÐºÑ; здеÑÑ ÑÑиÑÑваеÑÑÑ ÑиÑло ÑÑÑаниÑ, коÑоÑое по Ð¼Ð½ÐµÐ½Ð¸Ñ Ð¿Ð»Ð°Ð½Ð¸ÑовÑика бÑÐ´ÐµÑ Ð·Ð°ÑÑонÑÑо пÑи ÑканиÑовании. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ñакже ÑÑиÑÑваеÑÑÑ, когда нÑжно опÑеделиÑÑ, Ð¼Ð¾Ð¶ÐµÑ Ð»Ð¸ некоÑоÑÑй Ð¸Ð½Ð´ÐµÐºÑ Ð¾Ð±ÑабаÑÑваÑÑÑÑ Ð¿Ñи паÑаллелÑной оÑиÑÑке. См. VACUUM. ÐÑли ÑÑо знаÑение задаÑÑÑÑ Ð±ÐµÐ· ÐµÐ´Ð¸Ð½Ð¸Ñ Ð¸Ð·Ð¼ÐµÑениÑ, оно ÑÑиÑаеÑÑÑ Ð·Ð°Ð´Ð°Ð½Ð½Ñм в Ð±Ð»Ð¾ÐºÐ°Ñ (ÑÐ°Ð·Ð¼ÐµÑ ÐºÐ¾ÑоÑÑÑ Ñавен
BLCKSZбайÑ, обÑÑно ÑÑо 8 ÐÐ). ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â 512 ÐºÐ¸Ð»Ð¾Ð±Ð°Ð¹Ñ (512kB).effective_cache_size(integer) #ÐпÑеделÑÐµÑ Ð¿ÑедÑÑавление планиÑовÑика об ÑÑÑекÑивном ÑазмеÑе диÑкового кеÑа, доÑÑÑпном Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ запÑоÑа. ÐÑо пÑедÑÑавление влиÑÐµÑ Ð½Ð° оÑÐµÐ½ÐºÑ ÑÑоимоÑÑи иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð½Ð´ÐµÐºÑа; Ñем вÑÑе ÑÑо знаÑение, Ñем болÑÑе веÑоÑÑноÑÑÑ, ÑÑо бÑÐ´ÐµÑ Ð¿ÑименÑÑÑÑÑ ÑканиÑование по индекÑÑ, Ñем ниже, Ñем более веÑоÑÑно, ÑÑо бÑÐ´ÐµÑ Ð²ÑбÑано поÑледоваÑелÑное ÑканиÑование. ÐÑи ÑÑÑановке ÑÑого паÑамеÑÑа ÑледÑÐµÑ ÑÑиÑÑваÑÑ Ð¸ обÑÑм ÑазделÑемÑÑ Ð±ÑÑеÑов PostgreSQL, и пÑоÑÐµÐ½Ñ Ð´Ð¸Ñкового кеÑа ÑдÑа, коÑоÑÑй бÑдÑÑ Ð·Ð°Ð½Ð¸Ð¼Ð°ÑÑ ÑÐ°Ð¹Ð»Ñ Ð´Ð°Ð½Ð½ÑÑ PostgreSQL, Ñ Ð¾ÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе даннÑе могÑÑ Ð¾ÐºÐ°Ð·Ð°ÑÑÑÑ Ð¸ Ñам, и Ñам. ÐÑоме Ñого, ÑледÑÐµÑ Ð¿ÑинÑÑÑ Ð²Ð¾ внимание ожидаемое ÑиÑло паÑаллелÑнÑÑ Ð·Ð°Ð¿ÑоÑов к ÑазнÑм ÑаблиÑам, Ñак как обÑий ÑÐ°Ð·Ð¼ÐµÑ Ð±ÑÐ´ÐµÑ ÑазделÑÑÑÑÑ Ð¼ÐµÐ¶Ð´Ñ Ð½Ð¸Ð¼Ð¸. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð½Ðµ влиÑÐµÑ Ð½Ð° ÑÐ°Ð·Ð¼ÐµÑ ÑазделÑемой памÑÑи, вÑделÑемой PostgreSQL, и не задаÑÑ ÑÐ°Ð·Ð¼ÐµÑ ÑезеÑвиÑÑемого в ÑдÑе диÑкового кеÑа; он иÑполÑзÑеÑÑÑ ÑолÑко в каÑеÑÑве оÑиенÑиÑовоÑной оÑенки. ÐÑи ÑÑом ÑиÑÑема не ÑÑиÑÑваеÑ, ÑÑо даннÑе могÑÑ Ð¾ÑÑаваÑÑÑÑ Ð² диÑковом кеÑе Ð¾Ñ Ð·Ð°Ð¿ÑоÑа к запÑоÑÑ. ÐÑли ÑÑо знаÑение задаÑÑÑÑ Ð±ÐµÐ· ÐµÐ´Ð¸Ð½Ð¸Ñ Ð¸Ð·Ð¼ÐµÑениÑ, оно ÑÑиÑаеÑÑÑ Ð·Ð°Ð´Ð°Ð½Ð½Ñм в Ð±Ð»Ð¾ÐºÐ°Ñ (ÑÐ°Ð·Ð¼ÐµÑ ÐºÐ¾ÑоÑÑÑ Ñавен
BLCKSZбайÑ, обÑÑно ÑÑо 8 ÐÐ). ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â 4 гигабайÑа (4GB). ÐÑлиBLCKSZоÑлиÑен Ð¾Ñ 8 ÐÐ, знаÑение по ÑмолÑÐ°Ð½Ð¸Ñ ÐºÐ¾ÑÑекÑиÑÑеÑÑÑ Ð¿ÑопоÑÑионалÑно.jit_above_cost(floating point) #УÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð¿Ñедел ÑÑоимоÑÑи запÑоÑа, пÑи пÑевÑÑении коÑоÑого вклÑÑаеÑÑÑ JIT-компилÑÑиÑ, еÑли она поддеÑживаеÑÑÑ (Ñм. ÐлавÑ 32). ÐÑименение JIT Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ Ð²ÑÐµÐ¼Ñ Ð¿Ñи планиÑовании, но Ð¼Ð¾Ð¶ÐµÑ ÑÑкоÑиÑÑ Ð²Ñполнение запÑоÑа в Ñелом. ÐнаÑение
-1оÑклÑÑÐ°ÐµÑ JIT-компилÑÑиÑ. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â100000.jit_inline_above_cost(floating point) #УÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð¿Ñедел ÑÑоимоÑÑи, пÑи пÑевÑÑении коÑоÑого бÑÐ´ÐµÑ Ð´Ð¾Ð¿ÑÑкаÑÑÑÑ Ð²ÑÑÑаивание ÑÑнкÑий и опеÑаÑоÑов в пÑоÑеÑÑе JIT-компилÑÑии. ÐÑÑÑаивание Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ Ð²ÑÐµÐ¼Ñ Ð¿Ñи планиÑовании, но в Ñелом Ð¼Ð¾Ð¶ÐµÑ ÑÑкоÑиÑÑ Ð²Ñполнение. ÐÑиÑваиваÑÑ ÑÑÐ¾Ð¼Ñ Ð¿Ð°ÑамеÑÑÑ Ð·Ð½Ð°Ñение, менÑÑее Ñем
jit_above_cost, не Ð¸Ð¼ÐµÐµÑ ÑмÑÑла. ÐнаÑение-1оÑклÑÑÐ°ÐµÑ Ð²ÑÑÑаивание. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â500000.jit_optimize_above_cost(floating point) #УÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð¿Ñедел ÑÑоимоÑÑи, пÑи пÑевÑÑении коÑоÑого в JIT-компилиÑованнÑÑ Ð¿ÑогÑÐ°Ð¼Ð¼Ð°Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑименÑÑÑÑÑ Ð´Ð¾ÑогоÑÑоÑÑÐ°Ñ Ð¾Ð¿ÑимизаÑиÑ. Ð¢Ð°ÐºÐ°Ñ Ð¾Ð¿ÑимизаÑÐ¸Ñ ÑвелиÑÐ¸Ð²Ð°ÐµÑ Ð²ÑÐµÐ¼Ñ Ð¿Ð»Ð°Ð½Ð¸ÑованиÑ, но в Ñелом Ð¼Ð¾Ð¶ÐµÑ ÑÑкоÑиÑÑ Ð²Ñполнение. ÐÑиÑваиваÑÑ ÑÑÐ¾Ð¼Ñ Ð¿Ð°ÑамеÑÑÑ Ð·Ð½Ð°Ñение, менÑÑее Ñем
jit_above_cost, не Ð¸Ð¼ÐµÐµÑ ÑмÑÑла, а пÑи знаÑениÑÑ , пÑевÑÑаÑÑиÑjit_inline_above_cost, положиÑелÑнÑй ÑÑÑÐµÐºÑ Ð¼Ð°Ð»Ð¾Ð²ÐµÑоÑÑен. ÐнаÑение-1оÑклÑÑÐ°ÐµÑ Ð´Ð¾ÑогоÑÑоÑÑие опÑимизаÑии. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â500000.
20.7.3. ÐенеÑиÑеÑкий опÑимизаÑÐ¾Ñ Ð·Ð°Ð¿ÑоÑов #
ÐенеÑиÑеÑкий опÑимизаÑÐ¾Ñ Ð·Ð°Ð¿ÑоÑов (GEnetic Query Optimizer, GEQO) оÑÑÑеÑÑвлÑÐµÑ Ð¿Ð»Ð°Ð½Ð¸Ñование запÑоÑов, пÑименÑÑ ÑвÑиÑÑиÑеÑкий поиÑк. ÐÑо позволÑÐµÑ ÑокÑаÑиÑÑ Ð²ÑÐµÐ¼Ñ Ð¿Ð»Ð°Ð½Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ ÑложнÑÑ Ð·Ð°Ð¿ÑоÑов (в коÑоÑÑÑ ÑоединÑÑÑÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво оÑноÑений), Ñеной Ñого, ÑÑо иногда полÑÑеннÑе Ð¿Ð»Ð°Ð½Ñ ÑÑÑÑпаÑÑ Ð¿Ð¾ каÑеÑÑÐ²Ñ Ð¿Ð»Ð°Ð½Ð°Ð¼, вÑбиÑаемÑм пÑи полном пеÑебоÑе. Ðа дополниÑелÑнÑми ÑведениÑми обÑаÑиÑеÑÑ Ðº Ðлаве 62.
geqo(boolean) #ÐклÑÑÐ°ÐµÑ Ð¸Ð»Ð¸ оÑклÑÑÐ°ÐµÑ Ð³ÐµÐ½ÐµÑиÑеÑкÑÑ Ð¾Ð¿ÑимизаÑÐ¸Ñ Ð·Ð°Ð¿ÑоÑов. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¾Ð½Ð° вклÑÑена. РпÑоизводÑÑвенной ÑÑеде ÐµÑ Ð»ÑÑÑе не оÑклÑÑаÑÑ; более гибко ÑпÑавлÑÑÑ GEQO можно Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¿ÐµÑеменной
geqo_threshold.geqo_threshold(integer) #ÐадаÑÑ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»Ñное ÑиÑло ÑлеменÑов во
FROM, пÑи коÑоÑом Ð´Ð»Ñ Ð¿Ð»Ð°Ð½Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð·Ð°Ð¿ÑоÑа бÑÐ´ÐµÑ Ð¿ÑивлеÑÑн генеÑиÑеÑкий опÑимизаÑоÑ. (ÐамеÑÑÑе, ÑÑо конÑÑÑÑкÑиÑFULL OUTER JOINÑÑиÑаеÑÑÑ Ð¾Ð´Ð½Ð¸Ð¼ ÑлеменÑом ÑпиÑкаFROM.) ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â 12. ÐÐ»Ñ Ð±Ð¾Ð»ÐµÐµ пÑоÑÑÑÑ Ð·Ð°Ð¿ÑоÑов ÑаÑÑо лÑÑÑе иÑполÑзоваÑÑ Ð¾Ð±ÑÑнÑй планиÑовÑик, пÑоизводÑÑий полнÑй пеÑебоÑ, но Ð´Ð»Ñ Ð·Ð°Ð¿ÑоÑов Ñо множеÑÑвом ÑÐ°Ð±Ð»Ð¸Ñ Ð¿Ð¾Ð»Ð½Ñй пеÑÐµÐ±Ð¾Ñ Ð·Ð°Ð¹Ð¼ÑÑ ÑлиÑком много вÑемени, ÑаÑе гоÑаздо болÑÑе, Ñем бÑÐ´ÐµÑ Ð¿Ð¾ÑеÑÑно из-за вÑбоÑа не Ñамого ÑÑÑекÑивного плана. Таким обÑазом, огÑаниÑение по ÑазмеÑÑ Ð·Ð°Ð¿ÑоÑа даÑÑ ÑдобнÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ ÑпÑавлÑÑÑ GEQO.geqo_effort(integer) #УпÑавлÑÐµÑ Ð²ÑбоÑом Ð¼ÐµÐ¶Ð´Ñ ÑокÑаÑением вÑеменем планиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸ повÑÑением каÑеÑÑва плана запÑоÑа в GEQO. ÐÑо знаÑение должна задаваÑÑÑÑ ÑелÑм ÑиÑлом Ð¾Ñ 1 до 10. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ Ñавно пÑÑи. Чем болÑÑе знаÑение ÑÑого паÑамеÑÑа, Ñем болÑÑе вÑемени бÑÐ´ÐµÑ Ð¿Ð¾ÑÑаÑено на планиÑование запÑоÑа, но и Ñем болÑÑе веÑоÑÑноÑÑÑ, ÑÑо бÑÐ´ÐµÑ Ð²ÑбÑан ÑÑÑекÑивнÑй план.
ÐаÑамеÑÑ
geqo_effortÑам по Ñебе ниÑего не делаеÑ, он иÑполÑзÑеÑÑÑ ÑолÑко Ð´Ð»Ñ Ð²ÑÑиÑÐ»ÐµÐ½Ð¸Ñ Ð·Ð½Ð°Ñений по ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ Ð´ÑÑÐ³Ð¸Ñ Ð¿ÐµÑеменнÑÑ , влиÑÑÑÐ¸Ñ Ð½Ð° поведение GEQO (они опиÑÐ°Ð½Ñ Ð½Ð¸Ð¶Ðµ). ÐÑи желании ÑÑи пеÑеменнÑе можно пÑоÑÑо ÑÑÑановиÑÑ Ð²ÑÑÑнÑÑ.geqo_pool_size(integer) #ÐадаÑÑ ÑÐ°Ð·Ð¼ÐµÑ Ð¿Ñла Ð´Ð»Ñ Ð°Ð»Ð³Ð¾ÑиÑма GEQO, Ñо еÑÑÑ ÑиÑло оÑобей в генеÑиÑеÑкой попÑлÑÑии. ÐÑо ÑиÑло должно бÑÑÑ Ð½Ðµ менÑÑе двÑÑ , но полезнÑе знаÑÐµÐ½Ð¸Ñ Ð¾Ð±ÑÑно Ð»ÐµÐ¶Ð°Ñ Ð² инÑеÑвале Ð¾Ñ 100 до 1000. ÐÑли оно Ñавно нÑÐ»Ñ (ÑÑо знаÑение по ÑмолÑаниÑ), Ñо Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑее ÑиÑло вÑбиÑаеÑÑÑ, иÑÑ Ð¾Ð´Ñ Ð¸Ð· знаÑениÑ
geqo_effortи ÑиÑла ÑÐ°Ð±Ð»Ð¸Ñ Ð² запÑоÑе.geqo_generations(integer) #ÐадаÑÑ ÑиÑло поколений Ð´Ð»Ñ GEQO, Ñо еÑÑÑ ÑиÑло иÑеÑаÑий ÑÑого алгоÑиÑма. Ðно должно бÑÑÑ Ð½Ðµ менÑÑе единиÑÑ, но полезнÑе знаÑÐµÐ½Ð¸Ñ Ð½Ð°Ñ Ð¾Ð´ÑÑÑÑ Ð² Ñом же диапазоне, ÑÑо и ÑÐ°Ð·Ð¼ÐµÑ Ð¿Ñла. ÐÑли оно Ñавно нÑÐ»Ñ (ÑÑо знаÑение по ÑмолÑаниÑ), Ñо Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑее ÑиÑло вÑбиÑаеÑÑÑ, иÑÑ Ð¾Ð´Ñ Ð¸Ð·
geqo_pool_size.geqo_selection_bias(floating point) #ÐадаÑÑ Ð¸Ð½ÑенÑивноÑÑÑ ÑелекÑии Ð´Ð»Ñ GEQO, Ñо еÑÑÑ ÑелекÑивное давление в попÑлÑÑии. ÐопÑÑÑимÑе знаÑÐµÐ½Ð¸Ñ Ð»ÐµÐ¶Ð°Ñ Ð² диапазоне Ð¾Ñ 1.50 до 2.00 (ÑÑо знаÑение по ÑмолÑаниÑ).
geqo_seed(floating point) #ÐадаÑÑ Ð½Ð°ÑалÑное знаÑение Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑаÑоÑа ÑлÑÑайнÑÑ ÑиÑел, коÑоÑÑй пÑименÑеÑÑÑ Ð² GEQO Ð´Ð»Ñ Ð²ÑбоÑа ÑлÑÑайнÑÑ Ð¿ÑÑей в пÑоÑÑÑанÑÑве поиÑка поÑÑдка Ñоединений. ÐÐ¾Ð¶ÐµÑ Ð¸Ð¼ÐµÑÑ Ð·Ð½Ð°Ñение Ð¾Ñ Ð½ÑÐ»Ñ (по ÑмолÑаниÑ) до одного. ÐÑи изменении ÑÑого знаÑÐµÐ½Ð¸Ñ Ð¼ÐµÐ½ÑеÑÑÑ Ð½Ð°Ð±Ð¾Ñ Ð°Ð½Ð°Ð»Ð¸Ð·Ð¸ÑÑемÑÑ Ð¿ÑÑей, в ÑезÑлÑÑаÑе Ñего Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½Ð°Ð¹Ð´ÐµÐ½ как более, Ñак и менее опÑималÑнÑй пÑÑÑ.
20.7.4. ÐÑÑгие паÑамеÑÑÑ Ð¿Ð»Ð°Ð½Ð¸ÑовÑика #
default_statistics_target(integer) #УÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð·Ð½Ð°Ñение оÑиенÑиÑа ÑÑаÑиÑÑики по ÑмолÑаниÑ, ÑаÑпÑоÑÑÑанÑÑÑееÑÑ Ð½Ð° ÑÑолбÑÑ, Ð´Ð»Ñ ÐºÐ¾ÑоÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹
ALTER TABLE SET STATISTICSне Ð·Ð°Ð´Ð°Ð½Ñ Ð¾ÑделÑнÑе огÑаниÑениÑ. Чем болÑÑе ÑÑÑановленное знаÑение, Ñем болÑÑе вÑемени ÑÑебÑеÑÑÑ Ð´Ð»Ñ Ð²ÑполнениÑANALYZE, но Ñем вÑÑе Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÐºÐ°ÑеÑÑво оÑенок планиÑовÑика. ÐнаÑение ÑÑого паÑамеÑÑа по ÑмолÑÐ°Ð½Ð¸Ñ â 100. Ðа дополниÑелÑнÑми ÑведениÑми об иÑполÑзовании ÑÑаÑиÑÑики планиÑовÑиком запÑоÑов PostgreSQL обÑаÑиÑеÑÑ Ðº РазделÑ 14.2.constraint_exclusion(enum) #УпÑавлÑÐµÑ Ð¸ÑполÑзованием планиÑовÑиком огÑаниÑений ÑаблиÑÑ Ð´Ð»Ñ Ð¾Ð¿ÑимизаÑии запÑоÑов. ÐопÑÑÑимÑе знаÑениÑ
constraint_exclusion:on(задейÑÑвоваÑÑ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ Ð²ÑÐµÑ ÑаблиÑ),off(никогда не задейÑÑвоваÑÑ Ð¾Ð³ÑаниÑениÑ) иpartition(задейÑÑвоваÑÑ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ ÑолÑко Ð´Ð»Ñ Ð´Ð¾ÑеÑÐ½Ð¸Ñ ÑÐ°Ð±Ð»Ð¸Ñ Ð¸ подзапÑоÑовUNION ALL). ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ âpartition. Ðно ÑаÑÑо Ð¿Ð¾Ð¼Ð¾Ð³Ð°ÐµÑ ÑвелиÑиÑÑ Ð¿ÑоизводиÑелÑноÑÑÑ, когда пÑименÑÑÑÑÑ ÑÑадиÑионнÑе деÑевÑÑ Ð½Ð°ÑледованиÑ.Ðогда даннÑй паÑамеÑÑ ÑазÑеÑÐ°ÐµÑ ÑÑо Ð´Ð»Ñ ÑаблиÑÑ, планиÑовÑик ÑÑÐ°Ð²Ð½Ð¸Ð²Ð°ÐµÑ ÑÑÐ»Ð¾Ð²Ð¸Ñ Ð·Ð°Ð¿ÑоÑа Ñ Ð¾Ð³ÑаниÑениÑми
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, в ÑезÑлÑÑаÑе Ñего запÑÐ¾Ñ Ð²ÑполниÑÑÑ Ð±ÑÑÑÑее.РнаÑÑоÑÑее вÑÐµÐ¼Ñ Ð¸ÑклÑÑение по огÑаниÑÐµÐ½Ð¸Ñ ÑазÑеÑено по ÑмолÑÐ°Ð½Ð¸Ñ ÑолÑко в ÑÑловиÑÑ , возникаÑÑÐ¸Ñ Ð¿Ñи ÑеализаÑии ÑекÑиониÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑеÑез деÑевÑÑ Ð½Ð°ÑледованиÑ. ÐклÑÑение ÑÑой возможноÑÑи Ð´Ð»Ñ Ð²ÑÐµÑ ÑÐ°Ð±Ð»Ð¸Ñ Ð²Ð»ÐµÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе издеÑжки на планиÑование, доволÑно замеÑнÑе Ð´Ð»Ñ Ð¿ÑоÑÑÑÑ Ð·Ð°Ð¿ÑоÑов, но Ð¼Ð¾Ð¶ÐµÑ Ð½Ðµ даÑÑ Ð½Ð¸ÐºÐ°ÐºÐ¾Ð³Ð¾ вÑигÑÑÑа. ÐÑли Ð²Ñ Ð½Ðµ пÑименÑеÑе ÑекÑиониÑование ÑеÑез деÑевÑÑ Ð½Ð°ÑледованиÑ, Ð¸Ð¼ÐµÐµÑ ÑмÑÑл ÐµÑ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ Ð¾ÑклÑÑиÑÑ. (ÐамеÑÑÑе, ÑÑо Ð¿Ð¾Ñ Ð¾Ð¶Ð°Ñ ÑÑнкÑионалÑноÑÑÑ Ð´Ð»Ñ ÑекÑиониÑованнÑÑ ÑÐ°Ð±Ð»Ð¸Ñ ÑпÑавлÑеÑÑÑ Ð¾ÑделÑнÑм паÑамеÑÑом, enable_partition_pruning.)
Ðа дополниÑелÑнÑми ÑведениÑми о пÑименении иÑклÑÑений по огÑаниÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÑекÑиониÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑÐ°Ð±Ð»Ð¸Ñ Ð¾Ð±ÑаÑиÑеÑÑ Ðº ÐодÑазделÑ 5.11.5.
cursor_tuple_fraction(floating point) #ÐадаÑÑ Ð´Ð»Ñ Ð¿Ð»Ð°Ð½Ð¸ÑовÑика оÑÐµÐ½ÐºÑ Ð¿ÑоÑенÑа ÑÑÑок, коÑоÑÑе бÑдÑÑ Ð¿Ð¾Ð»ÑÑÐµÐ½Ñ ÑеÑез кÑÑÑоÑ. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â 0.1 (10%). ÐÑи менÑÑÐ¸Ñ Ð·Ð½Ð°ÑениÑÑ Ð¿Ð»Ð°Ð½Ð¸ÑовÑик бÑÐ´ÐµÑ Ñклонен иÑполÑзоваÑÑ Ð´Ð»Ñ ÐºÑÑÑоÑов Ð¿Ð»Ð°Ð½Ñ Ñ Â«Ð±ÑÑÑÑÑм ÑÑаÑÑом», позволÑÑÑие полÑÑаÑÑ Ð¿ÐµÑвÑе неÑколÑко ÑÑÑок оÑÐµÐ½Ñ Ð±ÑÑÑÑо, Ñ Ð¾ÑÑ Ð´Ð»Ñ Ð²ÑбоÑки вÑÐµÑ ÑÑÑок Ð¼Ð¾Ð¶ÐµÑ ÑйÑи болÑÑе вÑемени. ÐÑи болÑÑÐ¸Ñ Ð·Ð½Ð°ÑениÑÑ Ð¿Ð»Ð°Ð½Ð¸ÑовÑик ÑÑÑемиÑÑÑ Ð¾Ð¿ÑимизиÑоваÑÑ Ð¾Ð±Ñее вÑÐµÐ¼Ñ Ð·Ð°Ð¿ÑоÑа. ÐÑи макÑималÑном знаÑении, Ñавном 1.0, ÑабоÑа Ñ ÐºÑÑÑоÑами планиÑÑеÑÑÑ Ñак же, как и обÑÑнÑе запÑоÑÑ â минимизиÑÑеÑÑÑ ÑолÑко обÑее вÑемÑ, а не вÑÐµÐ¼Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð¿ÐµÑвÑÑ ÑÑÑок.
from_collapse_limit(integer) #ÐадаÑÑ Ð¼Ð°ÐºÑималÑное ÑиÑло ÑлеменÑов в ÑпиÑке
FROM, до коÑоÑого планиÑовÑик бÑÐ´ÐµÑ Ð¾Ð±ÑединÑÑÑ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ñе запÑоÑÑ Ñ Ð²Ð½ÐµÑним запÑоÑом. ÐÑи менÑÑÐ¸Ñ Ð·Ð½Ð°ÑениÑÑ ÑокÑаÑаеÑÑÑ Ð²ÑÐµÐ¼Ñ Ð¿Ð»Ð°Ð½Ð¸ÑованиÑ, но план запÑоÑа Ð¼Ð¾Ð¶ÐµÑ ÑÑаÑÑ Ð¼ÐµÐ½ÐµÐµ ÑÑÑекÑивнÑм. Ðо ÑмолÑÐ°Ð½Ð¸Ñ ÑÑо знаÑение Ñавно воÑÑми. Ðа дополниÑелÑнÑми ÑведениÑми обÑаÑиÑеÑÑ Ðº РазделÑ 14.3.ÐÑли ÑÑо знаÑение ÑделаÑÑ ÑавнÑм geqo_threshold или болÑÑе, пÑи Ñаком обÑединении запÑоÑов Ð¼Ð¾Ð¶ÐµÑ Ð²ÐºÐ»ÑÑиÑÑÑÑ Ð¿Ð»Ð°Ð½Ð¸ÑовÑик GEQO и в ÑезÑлÑÑаÑе бÑÐ´ÐµÑ Ð¿Ð¾Ð»ÑÑен неопÑималÑнÑй план. См. ÐодÑаздел 20.7.3.
jit(boolean) #ÐпÑеделÑеÑ, Ð¼Ð¾Ð¶ÐµÑ Ð»Ð¸ PostgreSQL иÑполÑзоваÑÑ ÐºÐ¾Ð¼Ð¿Ð¸Ð»ÑÑÐ¸Ñ JIT, еÑли она поддеÑживаеÑÑÑ (Ñм. ÐлавÑ 32). Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¾Ð½ вклÑÑÑн (
on).join_collapse_limit(integer) #ÐадаÑÑ Ð¼Ð°ÐºÑималÑное колиÑеÑÑво ÑлеменÑов в ÑпиÑке
FROM, до доÑÑÐ¸Ð¶ÐµÐ½Ð¸Ñ ÐºÐ¾ÑоÑого планиÑовÑик бÑÐ´ÐµÑ ÑноÑиÑÑ Ð² него ÑвнÑе конÑÑÑÑкÑииJOIN(за иÑклÑÑениемFULL JOIN). ÐÑи менÑÑÐ¸Ñ Ð·Ð½Ð°ÑениÑÑ ÑокÑаÑаеÑÑÑ Ð²ÑÐµÐ¼Ñ Ð¿Ð»Ð°Ð½Ð¸ÑованиÑ, но план запÑоÑа Ð¼Ð¾Ð¶ÐµÑ ÑÑаÑÑ Ð¼ÐµÐ½ÐµÐµ ÑÑÑекÑивнÑм.Ðо ÑмолÑÐ°Ð½Ð¸Ñ ÑÑа пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¸Ð¼ÐµÐµÑ Ñо же знаÑение, ÑÑо и
from_collapse_limit, и ÑÑо пÑиемлемо в болÑÑинÑÑве ÑлÑÑаев. ÐÑи знаÑении, Ñавном 1, пÑедложениÑJOINпеÑеÑÑавлÑÑÑÑÑ Ð½Ðµ бÑдÑÑ, Ñак ÑÑо Ñвно заданнÑй в запÑоÑе поÑÑдок Ñоединений опÑÐµÐ´ÐµÐ»Ð¸Ñ ÑакÑиÑеÑкий поÑÑдок, в коÑоÑом бÑдÑÑ ÑоединÑÑÑÑÑ Ð¾ÑноÑениÑ. Так как планиÑовÑик не вÑегда вÑбиÑÐ°ÐµÑ Ð¾Ð¿ÑималÑнÑй поÑÑдок Ñоединений, опÑÑнÑе полÑзоваÑели могÑÑ Ð²Ñеменно задаÑÑ Ð´Ð»Ñ ÑÑой пеÑеменной знаÑение 1, а заÑем Ñвно опÑеделиÑÑ Ð¶ÐµÐ»Ð°ÐµÐ¼Ñй поÑÑдок. Ðа дополниÑелÑнÑми ÑведениÑми обÑаÑиÑеÑÑ Ðº РазделÑ 14.3.ÐÑли ÑÑо знаÑение ÑделаÑÑ ÑавнÑм geqo_threshold или болÑÑе, пÑи Ñаком обÑединении запÑоÑов Ð¼Ð¾Ð¶ÐµÑ Ð²ÐºÐ»ÑÑиÑÑÑÑ Ð¿Ð»Ð°Ð½Ð¸ÑовÑик GEQO и в ÑезÑлÑÑаÑе бÑÐ´ÐµÑ Ð¿Ð¾Ð»ÑÑен неопÑималÑнÑй план. См. ÐодÑаздел 20.7.3.
plan_cache_mode(enum) #ÐодгоÑовленнÑе опеÑаÑоÑÑ (они могÑÑ Ð±ÑÑÑ Ð¿Ð¾Ð´Ð³Ð¾ÑÐ¾Ð²Ð»ÐµÐ½Ñ Ñвно либо неÑвно, как напÑÐ¸Ð¼ÐµÑ Ð² PL/pgSQL) могÑÑ Ð²ÑполнÑÑÑÑÑ Ñ Ð¸ÑполÑзованием ÑпеÑиализиÑованнÑÑ Ð¸Ð»Ð¸ обÑÐ¸Ñ Ð¿Ð»Ð°Ð½Ð¾Ð². СпеÑиализиÑованнÑе Ð¿Ð»Ð°Ð½Ñ ÑÑÑоÑÑÑÑ Ð·Ð°Ð½Ð¾Ð²Ð¾ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ ÐºÐ¾Ð½ÐºÑеÑнÑм набоÑом знаÑений паÑамеÑÑов, Ñогда как обÑий план не завиÑÐ¸Ñ Ð¾Ñ Ð·Ð½Ð°Ñений паÑамеÑÑов и Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð¼Ð½Ð¾Ð³Ð¾ÐºÑаÑно. Таким обÑазом, обÑий план позволÑÐµÑ ÑÑкономиÑÑ Ð²ÑÐµÐ¼Ñ Ð¿Ð»Ð°Ð½Ð¸ÑованиÑ, но он Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½ÐµÑÑÑекÑивнÑм, еÑли идеалÑнÑе Ð¿Ð»Ð°Ð½Ñ Ð² болÑÑой ÑÑепени опÑеделÑÑÑÑÑ Ð·Ð½Ð°ÑениÑми паÑамеÑÑов. ÐÑÐ±Ð¾Ñ Ð¼ÐµÐ¶Ð´Ñ ÑÑими ваÑианÑами обÑÑно пÑоизводиÑÑÑ Ð°Ð²ÑомаÑиÑеÑки, но его можно пеÑеопÑеделиÑÑ, воÑполÑзовавÑиÑÑ Ð¿Ð°ÑамеÑÑом
plan_cache_mode. Ðн Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑинимаÑÑ Ð·Ð½Ð°Ñениеauto(по ÑмолÑаниÑ),force_custom_plan(пÑинÑдиÑелÑно иÑполÑзоваÑÑ ÑпеÑиализиÑованнÑе планÑ) иforce_generic_plan(пÑинÑдиÑелÑно иÑполÑзоваÑÑ Ð¾Ð±Ñие планÑ). ÐнаÑение ÑÑого паÑамеÑÑа ÑÑиÑÑваеÑÑÑ Ð¿Ñи вÑполнении плана, а не пÑи поÑÑÑоении. Ðа дополниÑелÑнÑми ÑведениÑми обÑаÑиÑеÑÑ Ðº PREPARE.recursive_worktable_factor(floating point) #ÐадаÑÑ Ð¾ÑÐµÐ½ÐºÑ Ð¿Ð»Ð°Ð½Ð¸ÑовÑиком ÑÑеднего ÑазмеÑа ÑабоÑей ÑаблиÑÑ ÑекÑÑÑивного запÑоÑа как множиÑÐµÐ»Ñ Ð¾Ð¶Ð¸Ð´Ð°ÐµÐ¼Ð¾Ð³Ð¾ ÑазмеÑа наÑалÑной неÑекÑÑÑивной ÑаÑÑи запÑоÑа. ÐÑо Ð¿Ð¾Ð¼Ð¾Ð³Ð°ÐµÑ Ð¿Ð»Ð°Ð½Ð¸ÑовÑÐ¸ÐºÑ Ð²ÑбÑаÑÑ Ð½Ð°Ð¸Ð±Ð¾Ð»ÐµÐµ Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑий меÑод Ð´Ð»Ñ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ ÑÑой ÑабоÑей ÑаблиÑÑ Ñ Ð´ÑÑгими ÑаблиÑами запÑоÑа. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â
10.0. ÐенÑÑее знаÑение, напÑимеÑ1.0, Ð¼Ð¾Ð¶ÐµÑ Ð¾ÐºÐ°Ð·Ð°ÑÑÑÑ ÑÑÑекÑивнее, когда ÑекÑÑÑÐ¸Ñ Ñлабо «ÑазвеÑвлÑеÑÑÑ» Ð¾Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ñага к дÑÑгомÑ, как, напÑимеÑ, в запÑоÑÐ°Ñ ÐºÑаÑÑайÑего пÑÑи. ÐÑи аналиÑиÑеÑкой обÑабоÑке гÑаÑов опÑималÑнÑе знаÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð±Ð¾Ð»ÑÑе, Ñем знаÑение по ÑмолÑаниÑ.