CLUSTER
CLUSTER â клаÑÑеÑизоваÑÑ ÑаблиÑÑ ÑоглаÑно индекÑÑ
СинÑакÑиÑ
CLUSTER [VERBOSE]имÑ_ÑаблиÑÑ[ USINGимÑ_индекÑа] CLUSTER [VERBOSE]
ÐпиÑание
ÐпеÑаÑÐ¾Ñ CLUSTER ÑказÑÐ²Ð°ÐµÑ Postgres Pro клаÑÑеÑизоваÑÑ ÑаблиÑÑ, заданнÑÑ Ð¿Ð°ÑамеÑÑом имÑ_ÑаблиÑÑ, ÑоглаÑно индекÑÑ, Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð¼Ñ Ð¿Ð°ÑамеÑÑом имÑ_индекÑа. УказаннÑй Ð¸Ð½Ð´ÐµÐºÑ Ñже должен бÑÑÑ Ð¾Ð¿ÑеделÑн в ÑаблиÑе имÑ_ÑаблиÑÑ.
Ð ÑезÑлÑÑаÑе клаÑÑеÑизаÑии ÑаблиÑÑ ÐµÑ ÑодеÑжимое ÑизиÑеÑки пеÑеÑпоÑÑдоÑиваеÑÑÑ Ð² завиÑимоÑÑи Ð¾Ñ Ð¸Ð½Ð´ÐµÐºÑа. ÐлаÑÑеÑизаÑÐ¸Ñ ÑвлÑеÑÑÑ Ð¾Ð´Ð½Ð¾Ñазовой опеÑаÑией: поÑледÑÑÑие Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² ÑаблиÑе наÑÑÑаÑÑ Ð¿Ð¾ÑÑдок клаÑÑеÑизаÑии. ÐÑÑгими Ñловами, ÑиÑÑема не пÑÑаеÑÑÑ Ð°Ð²ÑомаÑиÑеÑки ÑоÑ
ÑанÑÑÑ Ð¿Ð¾ÑÑдок новÑÑ
или изменÑннÑÑ
ÑÑÑок в ÑооÑвеÑÑÑвии Ñ Ð¸Ð½Ð´ÐµÐºÑом. (ÐÑли Ñакое желание возникаеÑ, можно пеÑиодиÑеÑки повÑоÑÑÑÑ ÐºÐ»Ð°ÑÑеÑизаÑиÑ, вÑполнÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ñнова. ÐÑоме Ñого, еÑли Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð¹ ÑаблиÑÑ ÑÑÑановиÑÑ Ð¿Ð°ÑамеÑÑ FILLFACTOR менÑÑе 100%, ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð¼Ð¾ÑÑ ÑоÑ
ÑаниÑÑ Ð¿Ð¾ÑÑдок клаÑÑеÑизаÑии пÑи изменениÑÑ
, Ñак как изменÑемÑе ÑÑÑоки бÑдÑÑ Ð¿Ð¾Ð¼ÐµÑаÑÑÑÑ Ð² ÑÑ Ð¶Ðµ ÑÑÑаниÑÑ, еÑли в ней доÑÑаÑоÑно меÑÑа.)
Ðогда ÑаблиÑа клаÑÑеÑизована, Postgres Pro запоминаеÑ, по ÐºÐ°ÐºÐ¾Ð¼Ñ Ð¸Ð¼ÐµÐ½Ð½Ð¾ индекÑÑ. ФоÑма CLUSTER повÑоÑно клаÑÑеÑизÑÐµÑ ÑаблиÑÑ Ð¿Ð¾ ÑÐ¾Ð¼Ñ Ð¶Ðµ индекÑÑ. ÐÐ»Ñ ÑÑÑановки индекÑа, коÑоÑÑй бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð´Ð»Ñ Ð±ÑдÑÑиÑ
опеÑаÑий клаÑÑеÑизаÑии, или оÑиÑÑки пÑедÑдÑÑего знаÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ Ñакже пÑимениÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð¸Ð¼Ñ_ÑаблиÑÑCLUSTER или ÑоÑÐ¼Ñ SET WITHOUT CLUSTER ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ ALTER TABLE.
CLUSTER без паÑамеÑÑов повÑоÑно клаÑÑеÑизÑÐµÑ Ð²Ñе Ñанее клаÑÑеÑизованнÑе ÑаблиÑÑ Ð² ÑекÑÑей базе даннÑÑ
, пÑинадлежаÑие полÑзоваÑелÑ, вÑзÑваÑÑÐµÐ¼Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ, или вÑе Ñакие ÑаблиÑÑ, еÑли ÐµÑ Ð²ÑзÑÐ²Ð°ÐµÑ ÑÑпеÑполÑзоваÑелÑ. ÐÑÑ ÑоÑÐ¼Ñ CLUSTER нелÑÐ·Ñ Ð²ÑполнÑÑÑ Ð²Ð½ÑÑÑи блока ÑÑанзакÑии.
РпÑоÑеÑÑе клаÑÑеÑизаÑии ÑаблиÑÑ Ð´Ð»Ñ Ð½ÐµÑ Ð·Ð°Ð¿ÑаÑиваеÑÑÑ Ð±Ð»Ð¾ÐºÐ¸Ñовка ACCESS EXCLUSIVE. ÐÑо пÑепÑÑÑÑвÑÐµÑ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð²ÑеÑ
дÑÑгиÑ
опеÑаÑий (ÑÑÐµÐ½Ð¸Ñ Ð¸ запиÑи) Ñ ÑаблиÑей до завеÑÑÐµÐ½Ð¸Ñ CLUSTER.
ÐаÑамеÑÑÑ
имÑ_ÑаблиÑÑÐÐ¼Ñ ÑаблиÑÑ (возможно, дополненное ÑÑ ÐµÐ¼Ð¾Ð¹).
имÑ_индекÑаÐÐ¼Ñ Ð¸Ð½Ð´ÐµÐºÑа.
VERBOSEÐÑÐ²Ð¾Ð´Ð¸Ñ Ð¾ÑÑÑÑ Ð¾ пÑоÑеÑÑе клаÑÑеÑизаÑии по меÑе обÑабоÑки ÑаблиÑ.
ÐÑимеÑаниÑ
Ð ÑлÑÑаÑÑ
, когда пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð¾Ð±ÑаÑение к ÑлÑÑайнÑм единиÑнÑм ÑÑÑокам ÑаблиÑÑ, ÑакÑиÑеÑкий поÑÑдок даннÑÑ
в ÑÑой ÑаблиÑе не важен. Ðо еÑли обÑаÑÐµÐ½Ð¸Ñ Ðº одним даннÑм пÑоиÑÑ
одÑÑ ÑаÑе, Ñем к дÑÑгим, и еÑÑÑ Ð¸Ð½Ð´ÐµÐºÑ, коÑоÑÑй ÑобиÑÐ°ÐµÑ Ð¸Ñ
вмеÑÑе, пÑименение ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ CLUSTER Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ñм. ÐапÑимеÑ, когда из ÑаблиÑÑ Ð·Ð°Ð¿ÑаÑиваеÑÑÑ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½ индекÑиÑованнÑÑ
знаÑений, либо одно индекÑиÑованное знаÑение, коÑоÑÐ¾Ð¼Ñ ÑооÑвеÑÑÑвÑÑÑ Ð½ÐµÑколÑко ÑÑÑок, CLUSTER Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð¼Ð¾ÑÑ, Ñак как ÑÑÑаниÑа ÑаблиÑÑ, Ð½Ð°Ð¹Ð´ÐµÐ½Ð½Ð°Ñ Ð¿Ð¾ индекÑÑ Ð´Ð»Ñ Ð¿ÐµÑвой иÑкомой ÑÑÑоки, ÑкоÑее вÑего, бÑÐ´ÐµÑ ÑодеÑжаÑÑ Ð¸ вÑе оÑÑалÑнÑе иÑкомÑе ÑÑÑоки. Таким обÑазом, клаÑÑеÑизаÑÐ¸Ñ Ð¿Ð¾Ð¼Ð¾Ð³Ð°ÐµÑ ÑопÑимизиÑоваÑÑ Ð¾Ð±ÑаÑÐµÐ½Ð¸Ñ Ðº диÑÐºÑ Ð¸ ÑÑкоÑиÑÑ Ð·Ð°Ð¿ÑоÑÑ.
CLUSTER Ð¼Ð¾Ð¶ÐµÑ Ð¿ÐµÑеÑпоÑÑдоÑиÑÑ ÑаблиÑÑ, вÑполнив либо ÑканиÑование Ñказанного индекÑа, либо (Ð´Ð»Ñ Ð¸Ð½Ð´ÐµÐºÑов-B-деÑевÑев) поÑледоваÑелÑное ÑканиÑование, а заÑем ÑоÑÑиÑовкÑ. ÐаилÑÑÑий по ÑкоÑоÑÑи ваÑÐ¸Ð°Ð½Ñ Ð±ÑÐ´ÐµÑ Ð²ÑбÑан, иÑÑ
Ð¾Ð´Ñ Ð¸Ð· имеÑÑейÑÑ ÑÑаÑиÑÑиÑеÑкой инÑоÑмаÑии и паÑамеÑÑов планиÑовÑика.
Ðогда вÑбиÑаеÑÑÑ ÑканиÑование индекÑа, ÑоздаÑÑÑÑ Ð²ÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ ÑаблиÑа, ÑодеÑжаÑÐ°Ñ Ð´Ð°Ð½Ð½Ñе Ñелевой ÑаблиÑÑ Ð¿Ð¾ поÑÑÐ´ÐºÑ Ð¸Ð½Ð´ÐµÐºÑа. Также ÑоздаÑÑÑÑ ÐºÐ¾Ð¿Ð¸Ð¸ вÑÐµÑ Ð¸Ð½Ð´ÐµÐºÑов ÑаблиÑÑ. Таким обÑазом, Ð´Ð»Ñ ÑÑой опеÑаÑии ÑÑебÑеÑÑÑ Ð¾Ð±ÑÑм диÑкового пÑоÑÑÑанÑÑва не менÑÑе, Ñем ÑÐ°Ð·Ð¼ÐµÑ ÑаблиÑÑ Ð¸ индекÑов в ÑÑмме.
Ð ÑлÑÑае вÑбоÑа поÑледоваÑелÑного ÑканиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸ ÑоÑÑиÑовки ÑоздаÑÑÑÑ ÐµÑÑ Ð¸ вÑеменнÑй Ñайл Ð´Ð»Ñ ÑоÑÑиÑовки, Ñак ÑÑо пиковÑм ÑÑебованием бÑÐ´ÐµÑ ÑдвоеннÑй ÑÐ°Ð·Ð¼ÐµÑ ÑаблиÑÑ Ð¿Ð»ÑÑ ÑÐ°Ð·Ð¼ÐµÑ Ð¸Ð½Ð´ÐµÐºÑов. ÐÑÐ¾Ñ Ð¼ÐµÑод ÑаÑÑо бÑÑÑÑее, Ñем ÑканиÑование по индекÑÑ, но еÑли ÑÑебование к диÑÐºÐ¾Ð²Ð¾Ð¼Ñ Ð¿ÑоÑÑÑанÑÑÐ²Ñ Ð½ÐµÐ¿Ñиемлемо, можно оÑклÑÑиÑÑ ÐµÐ³Ð¾ вÑбоÑ, вÑеменно ÑÑÑановив enable_sort в off.
ÐеÑед клаÑÑеÑизаÑией ÑекомендÑеÑÑÑ ÑÑÑановиÑÑ Ð² maintenance_work_mem доÑÑаÑоÑно болÑÑое знаÑение (но не болÑÑе, Ñем обÑÑм ÐÐУ, коÑоÑÑй Ð²Ñ Ñ
оÑиÑе вÑделиÑÑ Ð´Ð»Ñ Ð¾Ð¿ÐµÑаÑии CLUSTER).
Так как планиÑовÑик запиÑÑÐ²Ð°ÐµÑ ÑÑаÑиÑÑикÑ, ÑвÑзаннÑÑ Ñ Ð¿Ð¾ÑÑдком ÑаблиÑ, Ð´Ð»Ñ Ð²Ð½Ð¾Ð²Ñ ÐºÐ»Ð°ÑÑеÑизÑемÑÑ ÑÐ°Ð±Ð»Ð¸Ñ ÑекомендÑеÑÑÑ Ð·Ð°Ð¿ÑÑкаÑÑ ANALYZE. РпÑоÑивном ÑлÑÑае планиÑовÑик Ð¼Ð¾Ð¶ÐµÑ Ð¾ÑибиÑÑÑÑ Ñ Ð²ÑбоÑом плана запÑоÑа.
Так как CLUSTER запоминаеÑ, по каким индекÑам клаÑÑеÑÐ¸Ð·Ð¾Ð²Ð°Ð½Ñ ÑаблиÑÑ, доÑÑаÑоÑно лиÑÑ Ð¾Ð´Ð¸Ð½ Ñаз вÑÑÑнÑÑ ÐºÐ»Ð°ÑÑеÑизоваÑÑ Ð½ÑжнÑе ÑаблиÑÑ, а заÑем наÑÑÑоиÑÑ Ð¿ÐµÑиодиÑеÑкий ÑкÑÐ¸Ð¿Ñ Ð¾Ð±ÑлÑживаниÑ, коÑоÑÑй бÑÐ´ÐµÑ Ð²ÑполнÑÑÑ CLUSTER без паÑамеÑÑов, Ñ Ñем ÑÑÐ¾Ð±Ñ ÑÑи ÑаблиÑÑ ÑегÑлÑÑно клаÑÑеÑизовалиÑÑ.
ÐÑимеÑÑ
ÐлаÑÑеÑизаÑÐ¸Ñ ÑаблиÑÑ employees ÑоглаÑно ÐµÑ Ð¸Ð½Ð´ÐµÐºÑÑ employees_ind:
CLUSTER employees USING employees_ind;
ÐлаÑÑеÑизаÑÐ¸Ñ ÑаблиÑÑ employees ÑоглаÑно ÑÐ¾Ð¼Ñ Ð¶Ðµ индекÑÑ, ÑÑо бÑл иÑполÑзован Ñанее:
CLUSTER employees;
ÐлаÑÑеÑизаÑÐ¸Ñ Ð²ÑÐµÑ ÑÐ°Ð±Ð»Ð¸Ñ Ð² базе даннÑÑ , ÑÑо бÑли клаÑÑеÑÐ¸Ð·Ð¾Ð²Ð°Ð½Ñ Ñанее:
CLUSTER;
СовмеÑÑимоÑÑÑ
ÐпеÑаÑÐ¾Ñ CLUSTER оÑÑÑÑÑÑвÑÐµÑ Ð² ÑÑандаÑÑе SQL.
СинÑакÑиÑ
CLUSTERимÑ_индекÑаONимÑ_ÑаблиÑÑ
Ñак же ÑвлÑеÑÑÑ Ð´Ð¾Ð¿ÑÑÑимÑм Ð´Ð»Ñ ÑовмеÑÑимоÑÑи Ñ PostgreSQL до веÑÑии 8.3.