ANALYZE
ANALYZE â ÑобÑаÑÑ ÑÑаÑиÑÑÐ¸ÐºÑ Ð¿Ð¾ базе даннÑÑ
СинÑакÑиÑ
ANALYZE [ (паÑамеÑÑ[, ...] ) ] [ÑаблиÑа_и_ÑÑолбÑÑ[, ...] ] ÐдеÑÑ Ð´Ð¾Ð¿ÑÑкаеÑÑÑпаÑамеÑÑ: VERBOSE [boolean] SKIP_LOCKED [boolean] BUFFER_USAGE_LIMITÑазмеÑиÑаблиÑа_и_ÑÑолбÑÑ: [ ONLY ]имÑ_ÑаблиÑÑ[ * ] [ (имÑ_ÑÑолбÑа[, ...] ) ]
ÐпиÑание
ANALYZE ÑобиÑÐ°ÐµÑ ÑÑаÑиÑÑиÑеÑкÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ ÑодеÑжимом ÑÐ°Ð±Ð»Ð¸Ñ Ð² базе даннÑÑ
и ÑоÑ
ÑанÑÐµÑ ÑезÑлÑÑаÑÑ Ð² ÑиÑÑемном каÑалоге pg_statistic. ÐпоÑледÑÑвии планиÑовÑик запÑоÑов бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑ ÑÑÑ ÑÑаÑиÑÑÐ¸ÐºÑ Ð´Ð»Ñ Ð²ÑбоÑа наиболее ÑÑÑекÑивнÑÑ
планов вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑоÑов.
Ðез ÑпиÑка ÑаблиÑа_и_ÑÑолбÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° ANALYZE обÑабаÑÑÐ²Ð°ÐµÑ Ð²Ñе ÑаблиÑÑ Ð¸ маÑеÑиализованнÑе пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² ÑекÑÑей базе даннÑÑ
, на анализ коÑоÑÑÑ
ÑекÑÑий полÑзоваÑÐµÐ»Ñ Ð¸Ð¼ÐµÐµÑ Ð¿Ñаво. Со ÑпиÑком ANALYZE обÑабаÑÑÐ²Ð°ÐµÑ ÑолÑко ÑказаннÑе в нÑм ÑаблиÑÑ. ÐополниÑелÑно можно задаÑÑ Ð´Ð»Ñ ÑаблиÑÑ ÑпиÑок имÑн ÑÑолбÑов, в ÑÑом ÑлÑÑае ÑÑаÑиÑÑика бÑÐ´ÐµÑ ÑобиÑаÑÑÑÑ ÑолÑко по ÑÑим ÑÑолбÑам.
ÐаÑамеÑÑÑ
VERBOSEÐклÑÑÐ°ÐµÑ Ð²Ñвод ÑообÑений о пÑоÑеÑÑе вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð½Ð° ÑÑовне
INFO.SKIP_LOCKEDУказÑваеÑ, ÑÑо команда
ANALYZEне должна ждаÑÑ Ð¾ÑÐ²Ð¾Ð±Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½ÑликÑÑÑÑÐ¸Ñ Ð±Ð»Ð¾ÐºÐ¸Ñовок, наÑÐ¸Ð½Ð°Ñ Ð¾Ð±ÑабоÑÐºÑ Ð¾ÑноÑениÑ: еÑли оÑноÑение не ÑдаÑÑÑÑ Ð·Ð°Ð±Ð»Ð¾ÐºÐ¸ÑоваÑÑ ÑÑазÑ, без ожиданиÑ, оно пÑопÑÑкаеÑÑÑ. ÐамеÑÑÑе, ÑÑо даже Ñ ÑÑим ÑказаниемANALYZEÐ¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð±Ð»Ð¾ÐºÐ¸ÑоваÑÑÑÑ, оÑкÑÑÐ²Ð°Ñ Ð¸Ð½Ð´ÐµÐºÑÑ Ð¾ÑноÑÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ полÑÑÐ°Ñ Ð²ÑбоÑÐºÑ ÑÑÑок из ÑекÑий, поÑомков в иеÑаÑÑ Ð¸Ð¸ наÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð»Ð¸ некоÑоÑÑÑ Ð²Ð¸Ð´Ð¾Ð² ÑÑоÑÐ¾Ð½Ð½Ð¸Ñ ÑаблиÑ. УÑÑиÑе Ñакже, ÑÑо пÑи налиÑии конÑликÑÑÑÑей блокиÑовки в ÑекÑиониÑованной ÑаблиÑе командаANALYZEпÑопÑÑÐºÐ°ÐµÑ Ð²Ñе ÐµÑ ÑекÑии, Ñогда как обÑÑно вÑе они обÑабаÑÑваÑÑÑÑ.BUFFER_USAGE_LIMITУказÑÐ²Ð°ÐµÑ ÑÐ°Ð·Ð¼ÐµÑ ÐºÐ¾Ð»ÑÑевого бÑÑеÑа ÑÑÑаÑегии доÑÑÑпа к бÑÑеÑам (Buffer Access Strategy) длÑ
ANALYZE. ÐÑÐ¾Ñ ÑÐ°Ð·Ð¼ÐµÑ Ð¸ÑполÑзÑеÑÑÑ Ð´Ð»Ñ ÑаÑÑÑÑа колиÑеÑÑва обÑÐ¸Ñ Ð±ÑÑеÑов, пеÑеиÑполÑзÑемÑÑ Ð² ÑÐ°Ð¼ÐºÐ°Ñ ÑÑой ÑÑÑаÑегии. С знаÑением0иÑполÑзование ÑÑÑаÑегии доÑÑÑпа к бÑÑеÑам оÑклÑÑаеÑÑÑ. ÐÑли не задаÑÑ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ,ANALYZEиÑполÑзÑÐµÑ Ð·Ð½Ð°Ñение из vacuum_buffer_usage_limit. С болÑÑим знаÑением паÑамеÑÑаANALYZEÐ¼Ð¾Ð¶ÐµÑ Ð²ÑполнÑÑÑÑÑ Ð±ÑÑÑÑее, но пÑи ÑлиÑком болÑÑом знаÑении многие полезнÑе ÑÑÑаниÑÑ Ð¼Ð¾Ð³ÑÑ Ð²ÑÑеÑнÑÑÑÑÑ Ð¸Ð· обÑÐ¸Ñ Ð±ÑÑеÑов. ÐинималÑное знаÑение â128 kB, макÑималÑное â16 GB.booleanÐклÑÑÐ°ÐµÑ Ð¸Ð»Ð¸ оÑклÑÑÐ°ÐµÑ Ð·Ð°Ð´Ð°Ð½Ð½Ñй паÑамеÑÑ. ÐÐ»Ñ Ð²ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ð¿Ð°ÑамеÑÑа можно напиÑаÑÑ
TRUE,ONили1, а Ð´Ð»Ñ Ð¾ÑклÑÑÐµÐ½Ð¸Ñ âFALSE,OFFили0. ÐнаÑениеbooleanможно опÑÑÑиÑÑ, в ÑÑом ÑлÑÑае подÑазÑмеваеÑÑÑTRUE.ÑазмеÑÐадаÑÑ Ð¾Ð±ÑÑм памÑÑи в килобайÑÐ°Ñ . Ðожно Ñакже ÑказаÑÑ Ð² виде ÑÑÑоки, ÑодеÑжаÑей ÑиÑловой ÑазмеÑ, за коÑоÑÑм ÑледÑÐµÑ Ð¾Ð´Ð½Ð° из ÑледÑÑÑÐ¸Ñ ÐµÐ´Ð¸Ð½Ð¸Ñ Ð¸Ð½ÑоÑмаÑии:
B(байÑÑ),kB(килобайÑÑ),MB(мегабайÑÑ),GB(гигабайÑÑ) илиTB(ÑеÑабайÑÑ).имÑ_ÑаблиÑÑÐÐ¼Ñ (возможно, дополненное ÑÑ ÐµÐ¼Ð¾Ð¹) опÑеделÑнной ÑаблиÑÑ, подлежаÑей анализÑ. ÐÑли опÑÑено, анализиÑоваÑÑÑÑ Ð±ÑдÑÑ Ð²Ñе обÑÑнÑе и ÑекÑиониÑованнÑе ÑаблиÑÑ, а Ñакже маÑеÑиализованнÑе пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² ÑекÑÑей базе даннÑÑ (но не ÑÑоÑонние ÑаблиÑÑ). ÐÑли пеÑед именем ÑаблиÑÑ ÑказаÑÑ
ONLY, бÑÐ´ÐµÑ Ð¿ÑоанализиÑована ÑолÑко ÑÑа ÑаблиÑа. ÐÑли не ÑказаÑÑONLY, бÑÐ´ÐµÑ Ð¿ÑоанализиÑована как Ñама ÑаблиÑа, Ñак и вÑе ÐµÑ Ð½Ð°ÑледÑемÑе доÑеÑние ÑаблиÑÑ Ð¸Ð»Ð¸ ÑекÑии (еÑли еÑÑÑ). ÐополниÑелÑно можно ÑказаÑÑ*поÑле имени ÑаблиÑÑ, ÑÑÐ¾Ð±Ñ Ñвно обознаÑиÑÑ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑÑ Ð°Ð½Ð°Ð»Ð¸Ð·Ð° наÑледÑемÑÑ Ð´Ð¾ÑеÑÐ½Ð¸Ñ ÑÐ°Ð±Ð»Ð¸Ñ (или ÑекÑий).имÑ_ÑÑолбÑаÐÐ¼Ñ ÑÑолбÑа, подлежаÑего анализÑ. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð°Ð½Ð°Ð»Ð¸Ð·Ð¸ÑÑÑÑÑÑ Ð²Ñе ÑÑолбÑÑ.
ÐÑÐ²Ð¾Ð´Ð¸Ð¼Ð°Ñ Ð¸Ð½ÑоÑмаÑиÑ
С Ñказанием VERBOSE команда ANALYZE вÑдаÑÑ ÑообÑÐµÐ½Ð¸Ñ Ð¾ пÑоÑеÑÑе анализа, оÑмеÑÐ°Ñ ÑекÑÑÑÑ Ð¾Ð±ÑабаÑÑваемÑÑ ÑаблиÑÑ. Также она вÑÐ²Ð¾Ð´Ð¸Ñ ÑазлиÑнÑе ÑÑаÑиÑÑиÑеÑкие ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ ÑаблиÑаÑ
.
ÐÑимеÑаниÑ
ЧÑÐ¾Ð±Ñ Ð¾ÑÑÑеÑÑвиÑÑ Ð°Ð½Ð°Ð»Ð¸Ð· ÑаблиÑÑ, обÑÑно нÑжно имеÑÑ Ð¿Ñаво MAINTAIN Ð´Ð»Ñ ÑаблиÑÑ. Ðднако владелÑÑам баз даннÑÑ
Ñакже ÑазÑеÑено вÑполнÑÑÑ Ð°Ð½Ð°Ð»Ð¸Ð· вÑеÑ
ÑÐ°Ð±Ð»Ð¸Ñ Ð² ÑвоиÑ
базаÑ
, за иÑклÑÑением обÑиÑ
каÑалогов. ANALYZE пÑопÑÑÐºÐ°ÐµÑ Ð²Ñе ÑаблиÑÑ, на анализ коÑоÑÑÑ
ÑекÑÑий полÑзоваÑÐµÐ»Ñ Ð½Ðµ Ð¸Ð¼ÐµÐµÑ Ð¿Ñав.
СÑоÑонние ÑаблиÑÑ Ð°Ð½Ð°Ð»Ð¸Ð·Ð¸ÑÑÑÑÑÑ ÑолÑко пÑи Ñвном Ñказании и ÑолÑко еÑли ÑооÑвеÑÑÑвÑÑÑÐ°Ñ Ð¾Ð±ÑÑÑка ÑÑоÑонниÑ
даннÑÑ
поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ ANALYZE. ÐÑли ÑÑа команда не поддеÑживаеÑÑÑ, пÑи вÑполнении ANALYZE вÑводиÑÑÑ Ð¿ÑедÑпÑеждение и болÑÑе ниÑего не пÑоиÑÑ
одиÑ.
Ð ÑÑандаÑÑной конÑигÑÑаÑии PostgreSQL ÑабоÑаÑÑий демон авÑооÑиÑÑки (Ñм. ÐодÑаздел 24.1.6) запÑÑÐºÐ°ÐµÑ Ð°Ð½Ð°Ð»Ð¸Ð· ÑÐ°Ð±Ð»Ð¸Ñ Ð°Ð²ÑомаÑиÑеÑки, когда они изнаÑалÑно заполнÑÑÑÑÑ Ð´Ð°Ð½Ð½Ñми, и пеÑиодиÑеÑки, по меÑе Ñого, как они менÑÑÑÑÑ. ÐÑли авÑооÑиÑÑка оÑклÑÑена, ÑекомендÑеÑÑÑ Ð·Ð°Ð¿ÑÑкаÑÑ ANALYZE вÑÐµÐ¼Ñ Ð¾Ñ Ð²Ñемени, либо поÑле каÑдиналÑнÑÑ
изменений в ÑаблиÑе. ТоÑÐ½Ð°Ñ ÑÑаÑиÑÑика Ð¿Ð¾Ð¼Ð¾Ð³Ð°ÐµÑ Ð¿Ð»Ð°Ð½Ð¸ÑовÑÐ¸ÐºÑ Ð²ÑбÑаÑÑ Ð½Ð°Ð¸Ð±Ð¾Ð»ÐµÐµ ÑÑÑекÑивнÑй план запÑоÑа и Ñем ÑамÑм ÑвелиÑÐ¸Ð²Ð°ÐµÑ ÑкоÑоÑÑÑ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑоÑа. ÐбÑÑно Ð´Ð»Ñ Ð±Ð°Ð·, где даннÑе в оÑновном ÑиÑаÑÑÑÑ, вÑполнÑÑÑ VACUUM и ANALYZE Ñаз в денÑ, во вÑÐµÐ¼Ñ Ð½Ð°Ð¸Ð¼ÐµÐ½ÑÑей акÑивноÑÑи. (ÐÑого бÑÐ´ÐµÑ Ð½ÐµÐ´Ð¾ÑÑаÑоÑно, еÑли даннÑе менÑÑÑÑÑ Ð¾ÑÐµÐ½Ñ Ð°ÐºÑивно.)
Ðа вÑÐµÐ¼Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ ANALYZE search_path вÑеменно менÑеÑÑÑ Ð½Ð° pg_catalog, pg_temp.
ANALYZE запÑаÑÐ¸Ð²Ð°ÐµÑ Ð´Ð»Ñ Ñелевой ÑаблиÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑÐ¾Ð²ÐºÑ ÑолÑко на ÑÑение, поÑÑÐ¾Ð¼Ñ Ð´Ð°Ð½Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° Ð¼Ð¾Ð¶ÐµÑ Ð²ÑполнÑÑÑÑÑ Ð¿Ð°ÑаллелÑно Ñ Ð´ÑÑгими не DDL-опеÑаÑиÑми Ñ ÑаблиÑей.
СÑаÑиÑÑика, ÑобиÑÐ°ÐµÐ¼Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ ANALYZE, обÑÑно вклÑÑÐ°ÐµÑ ÑпиÑок из неÑколÑкиÑ
ÑамÑÑ
ÑаÑÑÑÑ
знаÑений в каждом ÑÑолбÑе и гиÑÑогÑаммÑ, оÑÑажаÑÑÑÑ Ð¿ÑимеÑное ÑаÑпÑеделение даннÑÑ
во вÑеÑ
ÑÑолбÑаÑ
. Ðдин или оба ÑÑиÑ
ÑлеменÑа ÑÑаÑиÑÑики могÑÑ Ð±ÑÑÑ Ð¾Ð¿ÑÑенÑ, еÑли ANALYZE ÑоÑÑÑÑ Ð¸Ñ
неинÑеÑеÑнÑми (напÑимеÑ, в ÑÑолбÑе ÑникалÑного клÑÑа Ð½ÐµÑ Ð¿Ð¾Ð²ÑоÑÑÑÑиÑ
ÑÑ Ð·Ð½Ð°Ñений), либо еÑли Ñип даннÑÑ
ÑÑолбÑа не поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑооÑвеÑÑÑвÑÑÑие опеÑаÑоÑÑ. Ðолее подÑобно ÑÑаÑиÑÑика опиÑÑваеÑÑÑ Ð² Ðлаве 24.
РболÑÑиÑ
ÑаблиÑаÑ
ANALYZE не пÑоÑмаÑÑÐ¸Ð²Ð°ÐµÑ Ð²Ñе ÑÑÑоки, а обÑабаÑÑÐ²Ð°ÐµÑ ÑолÑко неболÑÑÑÑ ÑлÑÑайнÑÑ Ð²ÑбоÑкÑ. ÐÑо позволÑÐµÑ Ð¿ÑоанализиÑоваÑÑ Ð·Ð° коÑоÑкое вÑÐµÐ¼Ñ Ð´Ð°Ð¶Ðµ оÑÐµÐ½Ñ Ð±Ð¾Ð»ÑÑие ÑаблиÑÑ. Ðднако ÑÑÑиÑе, ÑÑо ÑÐ°ÐºÐ°Ñ ÑÑаÑиÑÑика бÑÐ´ÐµÑ Ð»Ð¸ÑÑ Ð¿ÑиблизиÑелÑной и Ð¼Ð¾Ð¶ÐµÑ Ð½ÐµÐ¼Ð½Ð¾Ð³Ð¾ менÑÑÑÑÑ Ð¿Ñи каждом вÑполнении ANALYZE, даже еÑли ÑакÑиÑеÑкое ÑодеÑжимое ÑаблиÑÑ Ð¾ÑÑаÑÑÑÑ Ð½ÐµÐ¸Ð·Ð¼ÐµÐ½Ð½Ñм. ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑиводиÑÑ Ðº неболÑÑим изменениÑм в оÑенкаÑ
ÑÑоимоÑÑи запÑоÑов, вÑводимÑÑ
командой EXPLAIN. Ð ÑедкиÑ
ÑлÑÑаÑÑ
вÑледÑÑвие ÑÑой недеÑеÑмениÑованноÑÑи планиÑовÑик менÑÐµÑ Ñвой вÑÐ±Ð¾Ñ Ð¿Ð¾Ñле вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ANALYZE. ЧÑÐ¾Ð±Ñ Ð¸Ð·Ð±ÐµÐ¶Ð°ÑÑ ÑÑого, ÑвелиÑÑÑе обÑÑм ÑÑаÑиÑÑики, ÑобиÑаемой командой ANALYZE, как опиÑано ниже.
ÐолиÑеÑÑвом ÑÑаÑиÑÑики можно ÑпÑавлÑÑÑ, наÑÑÑÐ°Ð¸Ð²Ð°Ñ ÐºÐ¾Ð½ÑигÑÑаÑионнÑÑ Ð¿ÐµÑеменнÑÑ default_statistics_target или ÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°Ñ Ð¾ÑиенÑÐ¸Ñ ÑÑаÑиÑÑики на ÑÑовне ÑÑолбÑов командой ALTER TABLE ... ALTER COLUMN ... SET STATISTICS (Ñм. ALTER TABLE). ÐÑиенÑÐ¸Ñ Ð·Ð°Ð´Ð°ÑÑ Ð¼Ð°ÐºÑималÑное ÑиÑло запиÑей в ÑпиÑке наиболее ÑаÑпÑоÑÑÑанÑннÑÑ
знаÑений и макÑималÑное ÑиÑло инÑеÑвалов в гиÑÑогÑамме. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð·Ð½Ð°Ñение оÑиенÑиÑа Ñавно 100, но его можно ÑвелиÑиÑÑ Ð¸Ð»Ð¸ ÑменÑÑиÑÑ Ð² поиÑкаÑ
баланÑа Ð¼ÐµÐ¶Ð´Ñ ÑоÑноÑÑÑÑ Ð¾Ñенок планиÑовÑика и вÑеменем, ÑÑебÑÑÑимÑÑ Ð´Ð»Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ANALYZE, а Ñакже обÑÑмом ÑÑаÑиÑÑики в ÑаблиÑе pg_statistic. ÐÑли ÑÑÑановиÑÑ Ð¾ÑиенÑÐ¸Ñ ÑÑаÑиÑÑики ÑавнÑм нÑлÑ, ÑÑаÑиÑÑика по Ñаким ÑÑолбÑам ÑобиÑаÑÑÑÑ Ð½Ðµ бÑдеÑ. ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾ Ð´Ð»Ñ ÑÑолбÑов, коÑоÑÑе никогда не ÑигÑÑиÑÑÑÑ Ð² пÑедложениÑÑ
WHERE, GROUP BY и ORDER BY, Ñак как планиÑовÑик никогда не бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑ Ð¸Ñ
ÑÑаÑиÑÑикÑ.
ЧиÑло ÑÑÑок ÑаблиÑÑ, вÑбиÑаемÑÑ
Ð´Ð»Ñ Ð¿Ð¾Ð´Ð³Ð¾Ñовки ÑÑаÑиÑÑики, опÑеделÑеÑÑÑ Ð½Ð°Ð¸Ð±Ð¾Ð»ÑÑим оÑиенÑиÑом ÑÑаÑиÑÑики по вÑем анализиÑÑемÑм ÑÑолбÑам ÑÑой ÑаблиÑÑ. УвелиÑение оÑиенÑиÑа пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº пÑопоÑÑионалÑÐ½Ð¾Ð¼Ñ ÑвелиÑÐµÐ½Ð¸Ñ Ð²Ñемени и пÑоÑÑÑанÑÑва, ÑÑебÑемого Ð´Ð»Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ANALYZE.
Ðдним из показаÑелей, оÑениваемÑÑ
командой ANALYZE, ÑвлÑеÑÑÑ ÑиÑло ÑазлиÑнÑÑ
знаÑений, вÑÑÑеÑаÑÑиÑ
ÑÑ Ð² каждом ÑÑолбÑе. Так как ÑаÑÑмаÑÑиваеÑÑÑ ÑолÑко подмножеÑÑво вÑеÑ
ÑÑÑок, ÑÑа оÑенка иногда Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð²ÐµÑÑма неÑоÑной, даже пÑи ÑамÑÑ
болÑÑиÑ
оÑиенÑиÑаÑ
ÑÑаÑиÑÑики. ÐÑли ÑÑа неÑоÑноÑÑÑ Ð¿ÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº плоÑ
Ð¾Ð¼Ñ Ð²ÑбоÑÑ Ð¿Ð»Ð°Ð½Ð° запÑоÑа, более ÑоÑное знаÑение можно опÑеделиÑÑ Ð²ÑÑÑнÑÑ Ð¸ заÑем задаÑÑ ÐµÐ³Ð¾ командой ALTER TABLE ... ALTER COLUMN ... SET (n_distinct = ...).
ÐÑли Ñ Ð°Ð½Ð°Ð»Ð¸Ð·Ð¸ÑÑемой ÑаблиÑÑ ÐµÑÑÑ Ð¿Ð¾Ñомки, ANALYZE ÑобеÑÑÑ Ð´Ð²Ð° набоÑа ÑÑаÑиÑÑик: один по ÑÑÑокам ÑолÑко ÑодиÑелÑÑкой ÑаблиÑÑ, а вÑоÑой по ÑÑÑокам ÑодиÑелÑÑкой и вÑеÑ
доÑеÑниÑ
ÑаблиÑ. ÐÑоÑой Ð½Ð°Ð±Ð¾Ñ ÑÑаÑиÑÑики необÑ
одим Ð´Ð»Ñ Ð¿Ð»Ð°Ð½Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð·Ð°Ð¿ÑоÑов, обÑаÑаÑÑиÑ
ÑÑ Ðº деÑÐµÐ²Ñ Ð½Ð°ÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ°Ðº Ð¾Ð´Ð½Ð¾Ð¼Ñ ÑеломÑ. Ðемон авÑооÑиÑÑки, однако, пÑÐ¸Ð½Ð¸Ð¼Ð°Ñ ÑеÑение об авÑомаÑиÑеÑком запÑÑке анализа, бÑÐ´ÐµÑ ÑÑиÑÑваÑÑ Ð¾Ð¿ÐµÑаÑии Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ
ÑолÑко в Ñамой ÑодиÑелÑÑкой ÑаблиÑе. ÐÑли Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¸ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² ÑÑой ÑаблиÑе пÑоиÑÑ
одÑÑ Ñедко, наÑледÑÐµÐ¼Ð°Ñ ÑÑаÑиÑÑика Ð¼Ð¾Ð¶ÐµÑ ÑеÑÑÑÑ Ð°ÐºÑÑалÑноÑÑÑ, еÑли не запÑÑкаÑÑ ANALYZE вÑÑÑнÑÑ. Ðо ÑмолÑÐ°Ð½Ð¸Ñ ANALYZE Ñакже ÑекÑÑÑивно ÑобиÑÐ°ÐµÑ Ð¸ обновлÑÐµÑ ÑÑаÑиÑÑÐ¸ÐºÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ доÑеÑней ÑаблиÑÑ. ЧÑÐ¾Ð±Ñ Ð¾ÑклÑÑиÑÑ ÑÑÑ ÑекÑÑÑивнÑÑ Ð¾Ð±ÑабоÑкÑ, можно иÑполÑзоваÑÑ ÐºÐ»ÑÑевое Ñлово ONLY.
ÐÐ»Ñ ÑекÑиониÑованнÑÑ
ÑÐ°Ð±Ð»Ð¸Ñ ANALYZE ÑобиÑÐ°ÐµÑ ÑÑаÑиÑÑикÑ, обÑабаÑÑÐ²Ð°Ñ Ð²ÑбоÑки ÑÑÑоки из вÑеÑ
ÑекÑий. Ðо ÑмолÑÐ°Ð½Ð¸Ñ ANALYZE Ñакже ÑекÑÑÑивно ÑобиÑÐ°ÐµÑ Ð¸ обновлÑÐµÑ ÑÑаÑиÑÑÐ¸ÐºÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ ÑекÑии. ЧÑÐ¾Ð±Ñ Ð¾ÑклÑÑиÑÑ ÑÑÑ ÑекÑÑÑивнÑÑ Ð¾Ð±ÑабоÑкÑ, можно иÑполÑзоваÑÑ ÐºÐ»ÑÑевое Ñлово ONLY.
ÐÑоÑеÑÑ Ð°Ð²ÑооÑиÑÑки не заÑÑÐ°Ð³Ð¸Ð²Ð°ÐµÑ ÑекÑиониÑованнÑе ÑаблиÑÑ Ð¸ ÑодиÑелÑÑкие ÑаблиÑÑ Ð² иеÑаÑÑ
ии наÑледованиÑ, еÑли Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿ÑоиÑÑ
одÑÑ ÑолÑко в доÑеÑниÑ
ÑаблиÑаÑ
. ÐоÑÑомÑ, ÑÑÐ¾Ð±Ñ ÑÑаÑиÑÑика вÑей иеÑаÑÑ
ии наÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ Ð±Ñла акÑÑалÑной, обÑÑно необÑ
одимо пеÑиодиÑеÑки вÑполнÑÑÑ ANALYZE вÑÑÑнÑÑ.
ÐÑли какие-либо из доÑеÑниÑ
ÑÐ°Ð±Ð»Ð¸Ñ Ð¸Ð»Ð¸ ÑекÑий ÑвлÑÑÑÑÑ ÑÑоÑонними ÑаблиÑами и иÑ
обÑÑÑки ÑÑоÑонниÑ
даннÑÑ
не поддеÑживаÑÑ ANALYZE, ÑÑи доÑеÑние ÑаблиÑÑ Ð¸Ð³Ð½Ð¾ÑиÑÑÑÑÑÑ Ð¿Ñи ÑбоÑе ÑÑаÑиÑÑики наÑледованиÑ.
ÐÑли анализиÑÑÐµÐ¼Ð°Ñ ÑаблиÑа оказалаÑÑ Ð¿ÑÑÑой, ANALYZE не бÑÐ´ÐµÑ Ð¾Ð±Ð½Ð¾Ð²Ð»ÑÑÑ ÑÑаÑиÑÑÐ¸ÐºÑ Ð¿Ð¾ ÑÑой ÑаблиÑе; в базе ÑоÑ
ÑаниÑÑÑ ÑÑаÑиÑÑика, ÑобÑÐ°Ð½Ð½Ð°Ñ Ñанее.
ÐаждÑй пÑоÑеÑÑ, вÑполнÑÑÑий опеÑаÑÐ¸Ñ ANALYZE, бÑÐ´ÐµÑ Ð²ÑдаваÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ Ñ
оде ÐµÑ Ð²ÑполнениÑ, оÑобÑажаемÑÑ Ð² пÑедÑÑавлении pg_stat_progress_analyze. Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº ÐодÑазделÑ 27.4.1.
СовмеÑÑимоÑÑÑ
ÐпеÑаÑÐ¾Ñ ANALYZE оÑÑÑÑÑÑвÑÐµÑ Ð² ÑÑандаÑÑе SQL.
Ðо веÑÑии PostgreSQL 11 иÑполÑзовалÑÑ Ð¸ по-пÑÐµÐ¶Ð½ÐµÐ¼Ñ Ð¿Ð¾Ð´Ð´ÐµÑживаеÑÑÑ ÑледÑÑÑий ÑинÑакÑиÑ:
ANALYZE [ VERBOSE ] [ ÑаблиÑа_и_ÑÑолбÑÑ [, ...] ]