ANALYZE
ANALYZE â ÑобÑаÑÑ ÑÑаÑиÑÑÐ¸ÐºÑ Ð¿Ð¾ базе даннÑÑ
СинÑакÑиÑ
ANALYZE [ VERBOSE ] [имÑ_ÑаблиÑÑ[ (имÑ_ÑÑолбÑа[, ...] ) ] ]
ÐпиÑание
ANALYZE ÑобиÑÐ°ÐµÑ ÑÑаÑиÑÑиÑеÑкÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ ÑодеÑжимом ÑÐ°Ð±Ð»Ð¸Ñ Ð² базе даннÑÑ
и ÑоÑ
ÑанÑÐµÑ ÑезÑлÑÑаÑÑ Ð² ÑиÑÑемном каÑалоге pg_statistic. ÐпоÑледÑÑвии планиÑовÑик запÑоÑов бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑ ÑÑÑ ÑÑаÑиÑÑÐ¸ÐºÑ Ð´Ð»Ñ Ð²ÑбоÑа наиболее ÑÑÑекÑивнÑÑ
планов вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑоÑов.
Ðез паÑамеÑÑов команда ANALYZE анализиÑÑÐµÑ Ð²Ñе ÑаблиÑÑ Ð² ÑекÑÑей базе даннÑÑ
. ÐÑли в паÑамеÑÑаÑ
пеÑедано Ð¸Ð¼Ñ ÑаблиÑÑ, ANALYZE обÑабаÑÑÐ²Ð°ÐµÑ ÑолÑко заданнÑÑ ÑаблиÑÑ. Также ÑÑа команда пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑпиÑок имÑн ÑÑолбÑов, ÑÑо позволÑÐµÑ Ð·Ð°Ð¿ÑÑÑиÑÑ ÑÐ±Ð¾Ñ ÑÑаÑиÑÑики ÑолÑко по ÑÑим ÑÑолбÑам.
ÐаÑамеÑÑÑ
VERBOSEÐклÑÑÐ°ÐµÑ Ð²Ñвод ÑообÑений о пÑоÑеÑÑе вÑполнениÑ.
имÑ_ÑаблиÑÑÐÐ¼Ñ (возможно, дополненное ÑÑ ÐµÐ¼Ð¾Ð¹) конкÑеÑной ÑаблиÑÑ, подлежаÑей анализÑ. ÐÑли опÑÑено, анализиÑоваÑÑÑÑ Ð±ÑдÑÑ Ð²Ñе обÑÑнÑе (не ÑÑоÑонние) ÑаблиÑÑ Ð² ÑекÑÑей базе даннÑÑ .
имÑ_ÑÑолбÑаÐÐ¼Ñ ÑÑолбÑа, подлежаÑего анализÑ. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð°Ð½Ð°Ð»Ð¸Ð·Ð¸ÑÑÑÑÑÑ Ð²Ñе ÑÑолбÑÑ.
ÐÑÐ²Ð¾Ð´Ð¸Ð¼Ð°Ñ Ð¸Ð½ÑоÑмаÑиÑ
С Ñказанием VERBOSE команда ANALYZE вÑдаÑÑ ÑообÑÐµÐ½Ð¸Ñ Ð¾ пÑоÑеÑÑе анализа, оÑмеÑÐ°Ñ ÑекÑÑÑÑ Ð¾Ð±ÑабаÑÑваемÑÑ ÑаблиÑÑ. Также она вÑÐ²Ð¾Ð´Ð¸Ñ ÑазлиÑнÑе ÑÑаÑиÑÑиÑеÑкие ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ ÑаблиÑаÑ
.
ÐамеÑаниÑ
ЧÑÐ¾Ð±Ñ Ð¾ÑÑÑеÑÑвиÑÑ Ð°Ð½Ð°Ð»Ð¸Ð· ÑаблиÑÑ, обÑÑно нÑжно бÑÑÑ Ð²Ð»Ð°Ð´ÐµÐ»ÑÑем ÑÑой ÑаблиÑÑ Ð¸Ð»Ð¸ ÑÑпеÑполÑзоваÑелем. Ðднако владелÑÑам баз даннÑÑ
Ñакже ÑазÑеÑено вÑполнÑÑÑ Ð°Ð½Ð°Ð»Ð¸Ð· вÑеÑ
ÑÐ°Ð±Ð»Ð¸Ñ Ð² ÑвоиÑ
базаÑ
, за иÑклÑÑением обÑиÑ
каÑалогов. (ÐгÑаниÑение в оÑноÑении обÑиÑ
каÑалогов ознаÑаеÑ, ÑÑо дейÑÑвиÑелÑно глобалÑнÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ ANALYZE Ð¼Ð¾Ð¶ÐµÑ Ð²ÑполниÑÑ ÑолÑко ÑÑпеÑполÑзоваÑелÑ.) ANALYZE пÑи обÑабоÑке пÑопÑÑÐºÐ°ÐµÑ Ð²Ñе ÑаблиÑÑ, на оÑиÑÑÐºÑ ÐºÐ¾ÑоÑÑÑ
ÑекÑÑий полÑзоваÑÐµÐ»Ñ Ð½Ðµ Ð¸Ð¼ÐµÐµÑ Ð¿Ñав.
СÑоÑонние ÑаблиÑÑ Ð°Ð½Ð°Ð»Ð¸Ð·Ð¸ÑÑÑÑÑÑ ÑолÑко пÑи Ñвном Ñказании и ÑолÑко еÑли ÑооÑвеÑÑÑвÑÑÑÐ°Ñ Ð¾Ð±ÑÑÑка ÑÑоÑонниÑ
даннÑÑ
поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ ANALYZE. ÐÑли ÑÑа команда не поддеÑживаеÑÑÑ, пÑи вÑполнении ANALYZE вÑводиÑÑÑ Ð¿ÑедÑпÑеждение и болÑÑе ниÑего не пÑоиÑÑ
одиÑ.
Ð ÑÑандаÑÑной конÑигÑÑаÑии Postgres Pro ÑабоÑаÑÑий демон авÑооÑиÑÑки (Ñм. ÐодÑаздел 23.1.6) запÑÑÐºÐ°ÐµÑ Ð°Ð½Ð°Ð»Ð¸Ð· ÑÐ°Ð±Ð»Ð¸Ñ Ð°Ð²ÑомаÑиÑеÑки, когда они изнаÑалÑно заполнÑÑÑÑÑ Ð´Ð°Ð½Ð½Ñми, и пеÑиодиÑеÑки, по меÑе Ñого, как они менÑÑÑÑÑ. ÐÑли авÑооÑиÑÑка оÑклÑÑена, ÑекомендÑеÑÑÑ Ð·Ð°Ð¿ÑÑкаÑÑ ANALYZE вÑÐµÐ¼Ñ Ð¾Ñ Ð²Ñемени, либо поÑле каÑдиналÑнÑÑ
изменений в ÑаблиÑе. ТоÑÐ½Ð°Ñ ÑÑаÑиÑÑика Ð¿Ð¾Ð¼Ð¾Ð³Ð°ÐµÑ Ð¿Ð»Ð°Ð½Ð¸ÑовÑÐ¸ÐºÑ Ð²ÑбÑаÑÑ Ð½Ð°Ð¸Ð±Ð¾Ð»ÐµÐµ ÑÑÑекÑивнÑй план запÑоÑа и Ñем ÑамÑм ÑвелиÑÐ¸Ð²Ð°ÐµÑ ÑкоÑоÑÑÑ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑоÑа. ÐбÑÑно Ð´Ð»Ñ Ð±Ð°Ð·, где даннÑе в оÑновном ÑиÑаÑÑÑÑ, вÑполнÑÑÑ VACUUM и ANALYZE Ñаз в денÑ, во вÑÐµÐ¼Ñ Ð½Ð°Ð¸Ð¼ÐµÐ½ÑÑей акÑивноÑÑи. (ÐÑого бÑÐ´ÐµÑ Ð½ÐµÐ´Ð¾ÑÑаÑоÑно, еÑли даннÑе менÑÑÑÑÑ Ð¾ÑÐµÐ½Ñ Ð°ÐºÑивно.)
ANALYZE запÑаÑÐ¸Ð²Ð°ÐµÑ Ð´Ð»Ñ Ñелевой ÑаблиÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑÐ¾Ð²ÐºÑ ÑолÑко на ÑÑение, Ñак ÑÑо ÑÑа команда Ð¼Ð¾Ð¶ÐµÑ Ð²ÑполнÑÑÑÑÑ Ð¿Ð°ÑаллелÑно Ñ Ð´ÑÑгими опеÑаÑиÑми Ñ ÑаблиÑей.
СÑаÑиÑÑика, ÑобиÑÐ°ÐµÐ¼Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ ANALYZE, обÑÑно вклÑÑÐ°ÐµÑ ÑпиÑок из неÑколÑкиÑ
ÑамÑÑ
ÑаÑÑÑÑ
знаÑений в каждом ÑÑолбÑе и гиÑÑогÑаммÑ, оÑÑажаÑÑÑÑ Ð¿ÑимеÑное ÑаÑпÑеделение даннÑÑ
во вÑеÑ
ÑÑолбÑаÑ
. Ðдин или оба ÑÑиÑ
ÑлеменÑа ÑÑаÑиÑÑики могÑÑ Ð±ÑÑÑ Ð¾Ð¿ÑÑенÑ, еÑли ANALYZE ÑоÑÑÑÑ Ð¸Ñ
неинÑеÑеÑнÑми (напÑимеÑ, в ÑÑолбÑе ÑникалÑного клÑÑа Ð½ÐµÑ Ð¿Ð¾Ð²ÑоÑÑÑÑиÑ
ÑÑ Ð·Ð½Ð°Ñений), либо еÑли Ñип даннÑÑ
ÑÑолбÑа не поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑооÑвеÑÑÑвÑÑÑие опеÑаÑоÑÑ. Ðолее подÑобно ÑÑаÑиÑÑика опиÑÑваеÑÑÑ Ð² Ðлаве 23.
РболÑÑиÑ
ÑаблиÑаÑ
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 = ...) (Ñм. ALTER TABLE).
ÐÑли Ñ Ð°Ð½Ð°Ð»Ð¸Ð·Ð¸ÑÑемой ÑаблиÑÑ ÐµÑÑÑ Ð¾Ð´Ð¸Ð½ или неÑколÑко поÑомков, ANALYZE ÑобеÑÑÑ ÑÑаÑиÑÑÐ¸ÐºÑ Ð´Ð²Ð°Ð¶Ð´Ñ: ÑнаÑала по ÑÑÑокам ÑолÑко ÑодиÑелÑÑкой ÑаблиÑÑ, а заÑем по ÑÑÑокам ÑодиÑелÑÑкой и вÑеÑ
доÑеÑниÑ
ÑаблиÑ. ÐÑоÑой Ð½Ð°Ð±Ð¾Ñ ÑÑаÑиÑÑики необÑ
одим Ð´Ð»Ñ Ð¿Ð»Ð°Ð½Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð·Ð°Ð¿ÑоÑов, обÑаÑаÑÑиÑ
ÑÑ ÐºÐ¾ вÑÐµÐ¼Ñ Ð´ÐµÑÐµÐ²Ñ Ð½Ð°ÑледованиÑ. Ðемон авÑооÑиÑÑки, однако, пÑÐ¸Ð½Ð¸Ð¼Ð°Ñ ÑеÑение об авÑомаÑиÑеÑком запÑÑке анализа, бÑÐ´ÐµÑ ÑÑиÑÑваÑÑ Ð¾Ð¿ÐµÑаÑии Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ
ÑолÑко в Ñамой ÑодиÑелÑÑкой ÑаблиÑе. ÐÑли именно в ÑÑой ÑаблиÑе изменение и добавление пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ñедко, наÑледÑÐµÐ¼Ð°Ñ ÑÑаÑиÑÑика Ð¼Ð¾Ð¶ÐµÑ ÑеÑÑÑÑ Ð°ÐºÑÑалÑноÑÑÑ, еÑли не запÑÑкаÑÑ ANALYZE вÑÑÑнÑÑ.
ÐÑли какие-либо из доÑеÑниÑ
ÑÐ°Ð±Ð»Ð¸Ñ ÑвлÑÑÑÑÑ ÑÑоÑонними ÑаблиÑами и иÑ
обÑÑÑки ÑÑоÑонниÑ
даннÑÑ
не поддеÑживаÑÑ ANALYZE, ÑÑи доÑеÑние ÑаблиÑÑ Ð¸Ð³Ð½Ð¾ÑиÑÑÑÑÑÑ Ð¿Ñи ÑбоÑе ÑÑаÑиÑÑики наÑледованиÑ.
ÐÑли анализиÑÑÐµÐ¼Ð°Ñ ÑаблиÑа оказалаÑÑ Ð¿ÑÑÑой, ANALYZE не бÑÐ´ÐµÑ Ð¾Ð±Ð½Ð¾Ð²Ð»ÑÑÑ ÑÑаÑиÑÑÐ¸ÐºÑ Ð¿Ð¾ ÑÑой ÑаблиÑе; в базе ÑоÑ
ÑаниÑÑÑ ÑÑаÑиÑÑика, ÑобÑÐ°Ð½Ð½Ð°Ñ Ñанее.
СовмеÑÑимоÑÑÑ
ÐпеÑаÑÐ¾Ñ ANALYZE оÑÑÑÑÑÑвÑÐµÑ Ð² ÑÑандаÑÑе SQL.