64.1. Ðведение
BRIN ÑаÑÑиÑÑовÑваеÑÑÑ ÐºÐ°Ðº «Block Range Index» (ÐÐ½Ð´ÐµÐºÑ Ð·Ð¾Ð½ блоков). BRIN пÑедназнаÑаеÑÑÑ Ð´Ð»Ñ Ð¾Ð±ÑабоÑки оÑÐµÐ½Ñ Ð±Ð¾Ð»ÑÑÐ¸Ñ ÑаблиÑ, в коÑоÑÑÑ Ð¾Ð¿ÑеделÑннÑе ÑÑолбÑÑ Ð½ÐµÐºÐ¾ÑоÑÑм еÑÑеÑÑвеннÑм обÑазом коÑÑелиÑÑÑÑ Ñ Ð¸Ñ ÑизиÑеÑким ÑаÑположением в ÑаблиÑе.
Ð BRIN иÑполÑзÑеÑÑÑ Ð¿Ð¾Ð½ÑÑие Ð·Ð¾Ð½Ñ Ð±Ð»Ð¾ÐºÐ¾Ð² (или Â«Ð·Ð¾Ð½Ñ ÑÑÑаниÑ»). Ðоной блоков назÑваеÑÑÑ Ð³ÑÑппа ÑÑÑаниÑ, ÑизиÑеÑки ÑаÑположеннÑÑ Ð² ÑаблиÑе ÑÑдом; Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ Ð·Ð¾Ð½Ñ Ð² индекÑе ÑÐ¾Ñ ÑанÑеÑÑÑ Ð½ÐµÐºÐ¾ÑоÑÐ°Ñ ÑÐ²Ð¾Ð´Ð½Ð°Ñ Ð¸Ð½ÑоÑмаÑиÑ. ÐапÑимеÑ, в ÑаблиÑе заказов магазина Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑÑÑ Ð¿Ð¾Ð»Ðµ Ñ Ð´Ð°Ñой Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð·Ð°ÐºÐ°Ð·Ð°, и пÑакÑиÑеÑки вÑегда запиÑи более ÑÐ°Ð½Ð½Ð¸Ñ Ð·Ð°ÐºÐ°Ð·Ð¾Ð² и в ÑаблиÑе бÑдÑÑ ÑазмеÑÐµÐ½Ñ Ð±Ð»Ð¸Ð¶Ðµ к наÑалÑ; в ÑаблиÑе, ÑодеÑжаÑей ÑÑÐ¾Ð»Ð±ÐµÑ Ñ Ð¿Ð¾ÑÑовÑм индекÑом, Ñакже еÑÑеÑÑвеннÑм обÑазом могÑÑ Ð³ÑÑппиÑоваÑÑÑÑ Ð·Ð°Ð¿Ð¸Ñи по гоÑодам.
ÐндекÑÑ BRIN могÑÑ ÑдовлеÑвоÑÑÑÑ Ð·Ð°Ð¿ÑоÑÑ, вÑполнÑÑ Ð¾Ð±ÑÑное ÑканиÑование по биÑовой каÑÑе, и бÑдÑÑ Ð²Ð¾Ð·Ð²ÑаÑаÑÑ Ð²Ñе коÑÑежи во вÑÐµÑ ÑÑÑаниÑÐ°Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ зонÑ, еÑли ÑводнÑе даннÑе, ÑÐ¾Ñ ÑанÑннÑе в индекÑе, ÑооÑвеÑÑÑвÑÑÑ ÑÑловиÑм запÑоÑа. ÐÑполниÑÐµÐ»Ñ Ð·Ð°Ð¿ÑоÑа должен пеÑепÑовеÑиÑÑ ÑÑи коÑÑежи и оÑбÑоÑиÑÑ Ñе, ÑÑо не ÑооÑвеÑÑÑвÑÑÑ ÑÑловиÑм запÑоÑа â дÑÑгими Ñловами, ÑÑи индекÑÑ Ð½ÐµÑоÑнÑе. Так как Ð¸Ð½Ð´ÐµÐºÑ BRIN оÑÐµÐ½Ñ Ð¼Ð°Ð»ÐµÐ½Ñкий, ÑканиÑование индекÑа влеÑÑÑ Ð¼Ð¸Ð·ÐµÑнÑе издеÑжки по ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ñ Ð¿Ð¾ÑледоваÑелÑнÑм ÑканиÑованием, но Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð·Ð±Ð°Ð²Ð¸ÑÑ Ð¾Ñ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи ÑканиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð±Ð¾Ð»ÑÑÐ¸Ñ Ð¾Ð±Ð»Ð°ÑÑей ÑаблиÑÑ, коÑоÑÑе опÑеделÑнно не ÑодеÑÐ¶Ð°Ñ Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑие коÑÑежи.
ÐонкÑеÑнÑе даннÑе, коÑоÑÑе бÑдÑÑ Ñ ÑаниÑÑÑ Ð² индекÑе BRIN, а Ñакже запÑоÑÑ, коÑоÑÑе ÑÐ¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð´Ð´ÐµÑжаÑÑ ÑÑÐ¾Ñ Ð¸Ð½Ð´ÐµÐºÑ, завиÑÑÑ Ð¾Ñ ÐºÐ»Ð°ÑÑа опеÑаÑоÑов, вÑбÑанного Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑÑолбÑа индекÑа. ÐапÑимеÑ, ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ Ñ Ð»Ð¸Ð½ÐµÐ¹Ð½Ñм поÑÑдком ÑоÑÑиÑовки могÑÑ Ð¸Ð¼ÐµÑÑ ÐºÐ»Ð°ÑÑÑ Ð¾Ð¿ÐµÑаÑоÑов, Ñ ÑанÑÑие минималÑное и макÑималÑное знаÑение Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ Ð·Ð¾Ð½Ñ Ð±Ð»Ð¾ÐºÐ¾Ð²; Ð´Ð»Ñ Ð³ÐµÐ¾Ð¼ÐµÑÑиÑеÑÐºÐ¸Ñ Ñипов Ð¼Ð¾Ð¶ÐµÑ Ñ ÑаниÑÑÑÑ Ð¿ÑÑмоÑголÑник, вмеÑаÑÑий вÑе обÑекÑÑ Ð² зоне блоков.
Ð Ð°Ð·Ð¼ÐµÑ Ð·Ð¾Ð½Ñ Ð±Ð»Ð¾ÐºÐ¾Ð² опÑеделÑеÑÑÑ Ð² Ð¼Ð¾Ð¼ÐµÐ½Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸Ð½Ð´ÐµÐºÑа паÑамеÑÑом Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ pages_per_range. ЧиÑло запиÑей в индекÑе бÑÐ´ÐµÑ ÑавнÑÑÑÑÑ ÑазмеÑÑ Ð¾ÑноÑÐµÐ½Ð¸Ñ Ð² ÑÑÑаниÑаÑ
, делÑÐ½Ð½Ð¾Ð¼Ñ Ð½Ð° ÑÑÑановленное знаÑение pages_per_range. Таким обÑазом, Ñем менÑÑе ÑÑо ÑиÑло, Ñем болÑÑе ÑÑановиÑÑÑ Ð¸Ð½Ð´ÐµÐºÑ (Ñак как в нÑм ÑÑебÑеÑÑÑ Ñ
ÑаниÑÑ Ð±Ð¾Ð»ÑÑе ÑлеменÑов), но в Ñо же вÑÐµÐ¼Ñ ÑводнÑе даннÑе могÑÑ Ð±ÑÑÑ Ð±Ð¾Ð»ÐµÐµ ÑоÑнÑми и болÑÑее ÑиÑло блоков даннÑÑ
Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÑопÑÑено пÑи ÑканиÑовании индекÑа.
64.1.1. ÐбÑлÑживание индекÑа
Ðо вÑÐµÐ¼Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸Ð½Ð´ÐµÐºÑа ÑканиÑÑÑÑÑÑ Ð²Ñе ÑÑÑеÑÑвÑÑÑие ÑÑÑаниÑÑ, и в ÑезÑлÑÑаÑе в индекÑе ÑоздаÑÑÑÑ ÑводнÑй коÑÑеж Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ зонÑ, в Ñом ÑиÑле, возможно неполной Ð·Ð¾Ð½Ñ Ð² конÑе. Ðо меÑе Ñого, как даннÑми наполнÑÑÑÑÑ Ð½Ð¾Ð²Ñе ÑÑÑаниÑÑ, еÑли они оказÑваÑÑÑÑ Ð² Ð·Ð¾Ð½Ð°Ñ , Ð´Ð»Ñ ÐºÐ¾ÑоÑÑÑ Ñже еÑÑÑ ÑÐ²Ð¾Ð´Ð½Ð°Ñ Ð¸Ð½ÑоÑмаÑиÑ, она бÑÐ´ÐµÑ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð° Ñ ÑÑÑÑом даннÑÑ Ð¸Ð· новÑÑ ÐºÐ¾ÑÑежей. ÐÑли же ÑоздаÑÑÑÑ Ð½Ð¾Ð²Ð°Ñ ÑÑÑаниÑа, не попадаÑÑÐ°Ñ Ð² поÑледнÑÑ Ð·Ð¾Ð½Ñ, Ð´Ð»Ñ Ð·Ð¾Ð½Ñ, в коÑоÑÑÑ Ð¿Ð¾Ð¿Ð°Ð´Ð°ÐµÑ Ð½Ð¾Ð²Ð°Ñ ÑÑÑаниÑа, ÑÐ²Ð¾Ð´Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑ Ð½Ðµ ÑаÑÑÑиÑÑваеÑÑÑ Ð°Ð²ÑомаÑиÑеÑки; коÑÑежи на ÑÐ°ÐºÐ¸Ñ ÑÑÑаниÑÐ°Ñ Ð¾ÑÑаÑÑÑÑ Ð½ÐµÑÑÑÑннÑми, пока не бÑÐ´ÐµÑ Ð¿ÑоведÑн наÑалÑнÑй ÑаÑÑÑÑ ÑводнÑÑ Ð´Ð°Ð½Ð½ÑÑ Ð´Ð»Ñ ÑÑой зонÑ.
ÐаÑалÑнÑй ÑаÑÑÑÑ Ñводки Ð´Ð»Ñ Ð·Ð¾Ð½Ñ ÑÑÑÐ°Ð½Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑоизводиÑÑÑÑ Ð½ÐµÑколÑкими ÑпоÑобами. Ðо-пеÑвÑÑ , Ñводка ÑаÑÑÑиÑÑваеÑÑÑ Ð² Ñ Ð¾Ð´Ðµ пÑоÑедÑÑÑ VACUUM, запÑÑенной вÑÑÑнÑÑ Ð¸Ð»Ð¸ из пÑоÑеÑÑа autovacuum, Ð´Ð»Ñ Ð²ÑÐµÑ ÑÑÑеÑÑвÑÑÑÐ¸Ñ Ð·Ð¾Ð½. Ðо-вÑоÑÑÑ , еÑли вклÑÑÑн паÑамеÑÑ autosummarize Ð´Ð»Ñ Ð¸Ð½Ð´ÐµÐºÑа (по ÑмолÑÐ°Ð½Ð¸Ñ Ð¾Ð½ оÑклÑÑÑн), пÑи авÑооÑиÑÑке ÑÑой Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ð¿ÑоизводиÑÑÑ ÑаÑÑÑÑ Ñводки Ð´Ð»Ñ Ð²ÑÐµÑ Ð·Ð¾Ð½ без Ñводной инÑоÑмаÑии, Ð¾Ñ Ð²Ð°ÑÑваÑÑÐ¸Ñ Ð½ÐµÐ´Ð°Ð²Ð½Ð¾ заполненнÑе ÑÑÑаниÑÑ ÑаблиÑÑ, незавиÑимо Ð¾Ñ Ñого, вÑполнÑеÑÑÑ Ð»Ð¸ авÑооÑиÑÑка именно ÑÑой ÑаблиÑÑ; подÑобнее Ñм. ниже.
ÐаконеÑ, можно иÑполÑзоваÑÑ ÑледÑÑÑие ÑÑнкÑии:
brin_summarize_new_values(regclass), ÑаÑÑÑиÑÑваÑÑÑÑ ÑÐ²Ð¾Ð´ÐºÑ Ð´Ð»Ñ Ð·Ð¾Ð½ без ÑводнÑÑ
даннÑÑ
; |
brin_summarize_range(regclass, bigint), ÑаÑÑÑиÑÑваÑÑÑÑ ÑÐ²Ð¾Ð´ÐºÑ Ð´Ð»Ñ Ð·Ð¾Ð½Ñ Ð±ÐµÐ· ÑводнÑÑ
даннÑÑ
, ÑодеÑжаÑей ÑказаннÑÑ ÑÑÑаниÑÑ. |
Ðогда вклÑÑÑн Ñежим авÑопеÑеÑÑÑÑа Ñводки, пÑи пеÑвом добавлении даннÑÑ
в пеÑвÑÑ ÑÑÑаниÑÑ Ð½Ð¾Ð²Ð¾Ð¹ Ð·Ð¾Ð½Ñ Ð¿ÑоÑеÑÑÑ autovacuum пеÑедаÑÑÑÑ Ð·Ð°Ð¿ÑÐ¾Ñ Ð½Ð° ÑаÑÑÑÑ Ñводки Ð´Ð»Ñ ÑÑой зонÑ. ÐÑÐ¾Ñ Ð·Ð°Ð¿ÑÐ¾Ñ Ð±ÑÐ´ÐµÑ Ð²Ñполнен пÑи ÑледÑÑÑей обÑабоÑке ÑÑой Ð±Ð°Ð·Ñ ÑабоÑим пÑоÑеÑÑом авÑооÑиÑÑки. ÐÑли оÑеÑÐµÐ´Ñ Ð·Ð°Ð¿ÑоÑов пеÑеполнена, запÑÐ¾Ñ Ð² Ð½ÐµÑ Ð½Ðµ запиÑÑваеÑÑÑ Ð¸ в жÑÑнал ÑеÑвеÑа вÑводиÑÑÑ ÑооÑвеÑÑÑвÑÑÑее ÑообÑение:
LOG: request for BRIN range summarization for index "brin_wi_idx" page 128 was not recorded
Ð ÑÑом ÑлÑÑае зона оÑÑанеÑÑÑ Ð±ÐµÐ· Ñводного знаÑениÑ, а ÑÑÐ¾Ð±Ñ ÐµÐ³Ð¾ ÑаÑÑÑиÑаÑÑ, нÑжно вÑÑÑнÑÑ Ð²ÑполниÑÑ Ð¾ÑиÑÑÐºÑ ÑÑой ÑаблиÑÑ Ð¸Ð»Ð¸ вÑзваÑÑ Ð¾Ð´Ð½Ñ Ð¸Ð· вÑÑеÑказаннÑÑ ÑÑнкÑий.
РнаобоÑоÑ, можно ÑдалиÑÑ Ñводное знаÑение Ð´Ð»Ñ Ð·Ð¾Ð½Ñ, вÑзвав ÑÑнкÑÐ¸Ñ brin_desummarize_range(regclass, bigint), ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾, когда ÑÑÐ¾Ñ ÐºÐ¾ÑÑеж в индекÑе ÑÑановиÑÑÑ Ð½Ðµ оÑÐµÐ½Ñ Ñ
оÑоÑим пÑедÑÑавлением ÑооÑвеÑÑÑвÑÑÑиÑ
даннÑÑ
, Ñак как они изменилиÑÑ. Ðа дополниÑелÑной инÑоÑмаÑией обÑаÑиÑеÑÑ Ðº ÐодÑазделÑ 9.26.8.