20.9. СÑаÑиÑÑика вÑемени вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ #
20.9.1. ÐакопиÑелÑÐ½Ð°Ñ ÑÑаÑиÑÑика по запÑоÑам и индекÑам #
ÐÑи паÑамеÑÑÑ ÑпÑавлÑÑÑ ÑиÑÑемой накопиÑелÑной ÑÑаÑиÑÑики на ÑÑовне ÑеÑвеÑа. Ðогда ÑÐ±Ð¾Ñ ÑÑаÑиÑÑики вклÑÑÑн, ÑобиÑаемÑе даннÑе можно пÑоÑмоÑÑеÑÑ Ð² ÑемейÑÑве ÑиÑÑемнÑÑ
пÑедÑÑавлений pg_stat и pg_statio. Ðа дополниÑелÑнÑми ÑведениÑми обÑаÑиÑеÑÑ Ðº Ðлаве 28.
track_activities(boolean) #ÐклÑÑÐ°ÐµÑ ÑÐ±Ð¾Ñ Ñведений о ÑекÑÑÐ¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°Ñ , вÑполнÑÑÑÐ¸Ñ ÑÑ Ð²Ð¾ вÑÐµÑ ÑеанÑÐ°Ñ (в ÑаÑÑноÑÑи, оÑÑлеживаеÑÑÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑÐ¾Ñ Ð¸ вÑÐµÐ¼Ñ Ð·Ð°Ð¿ÑÑка командÑ). Ðо ÑмолÑÐ°Ð½Ð¸Ñ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð²ÐºÐ»ÑÑÑн. ÐамеÑÑÑе, ÑÑо даже когда ÑÐ±Ð¾Ñ Ð²ÐµÐ´ÑÑÑÑ, ÑобÑÐ°Ð½Ð½Ð°Ñ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð´Ð¾ÑÑÑпна не Ð´Ð»Ñ Ð²ÑÐµÑ Ð¿Ð¾Ð»ÑзоваÑелей, а ÑолÑко Ð´Ð»Ñ ÑÑпеÑполÑзоваÑелей и полÑзоваÑелей, вклÑÑÑннÑÑ Ð² ÑолÑ
pg_read_all_stats. Также полÑзоваÑелÑм доÑÑÑпна инÑоÑмаÑÐ¸Ñ Ð¾ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°Ñ Ð² Ð¸Ñ ÑеанÑÐ°Ñ (вклÑÑÐ°Ñ ÑеанÑÑ Ñолей, в коÑоÑÑе ÑÑи полÑзоваÑели вклÑÑенÑ). ÐоÑÑÐ¾Ð¼Ñ ÑÑо не должно повлеÑÑ ÑиÑки, ÑвÑзаннÑе Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑÑÑ. ÐзмениÑÑ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð³ÑÑ ÑолÑко ÑÑпеÑполÑзоваÑели и полÑзоваÑели Ñ ÑооÑвеÑÑÑвÑÑÑим пÑавомSET.track_activity_query_size(integer) #ÐадаÑÑ Ð¾Ð±ÑÑм памÑÑи, ÑезеÑвиÑÑемой Ð´Ð»Ñ Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ ÑекÑÑа вÑполнÑемой в данной Ð¼Ð¾Ð¼ÐµÐ½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð² каждом акÑивном ÑеанÑе, Ð´Ð»Ñ Ð¿Ð¾Ð»Ñ
pg_stat_activity.query. ÐÑли ÑÑо знаÑение задаÑÑÑÑ Ð±ÐµÐ· ÐµÐ´Ð¸Ð½Ð¸Ñ Ð¸Ð·Ð¼ÐµÑениÑ, оно ÑÑиÑаеÑÑÑ Ð·Ð°Ð´Ð°Ð½Ð½Ñм в байÑÐ°Ñ . ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â 1024 байÑа. ÐадаÑÑ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ ÑолÑко пÑи запÑÑке ÑеÑвеÑа.track_counts(boolean) #ÐклÑÑÐ°ÐµÑ ÑÐ±Ð¾Ñ ÑÑаÑиÑÑики акÑивноÑÑи в базе даннÑÑ . ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð²ÐºÐ»ÑÑÑн, Ñак как ÑобÑÐ°Ð½Ð½Ð°Ñ Ð¸Ð½ÑоÑмаÑÐ¸Ñ ÑÑебÑеÑÑÑ Ð´ÐµÐ¼Ð¾Ð½Ñ Ð°Ð²ÑооÑиÑÑки. ÐзмениÑÑ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð³ÑÑ ÑолÑко ÑÑпеÑполÑзоваÑели и полÑзоваÑели Ñ ÑооÑвеÑÑÑвÑÑÑим пÑавом
SET.track_io_timing(boolean) #ÐклÑÑÐ°ÐµÑ Ð·Ð°Ð¼ÐµÑ Ð²Ñемени опеÑаÑий ввода-вÑвода. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð¾ÑклÑÑÑн, Ñак как Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ замеÑа ÑÑебÑеÑÑÑ Ð¿Ð¾ÑÑоÑнно запÑаÑиваÑÑ ÑекÑÑее вÑÐµÐ¼Ñ Ñ Ð¾Ð¿ÐµÑаÑионной ÑиÑÑемÑ, ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð·Ð½Ð°ÑиÑелÑно замедлиÑÑ ÑабоÑÑ Ð½Ð° некоÑоÑÑÑ Ð¿Ð»Ð°ÑÑоÑÐ¼Ð°Ñ . ÐÐ»Ñ Ð¾ÑÐµÐ½Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¸Ð·Ð´ÐµÑжек замеÑа вÑемени на ваÑей плаÑÑоÑме можно воÑполÑзоваÑÑÑÑ ÑÑилиÑой pg_test_timing. СÑаÑиÑÑÐ¸ÐºÑ Ð²Ð²Ð¾Ð´Ð°-вÑвода можно полÑÑиÑÑ ÑеÑез пÑедÑÑавление
pg_stat_database,pg_stat_io, в вÑводе EXPLAIN (когда иÑполÑзÑеÑÑÑ Ð¿Ð°ÑамеÑÑBUFFERS), в вÑводе VACUUM (когда иÑполÑзÑеÑÑÑ Ð¿Ð°ÑамеÑÑVERBOSE), Ð¾Ñ Ð¿ÑоÑеÑÑа авÑооÑиÑÑки, вÑполнÑÑÑего опеÑаÑии оÑиÑÑки и ÑбоÑа ÑÑаÑиÑÑики, когда ÑÑÑановлен паÑамеÑÑ log_autovacuum_min_duration, и ÑеÑез пÑедÑÑавление pg_stat_statements. ÐзмениÑÑ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð³ÑÑ ÑолÑко ÑÑпеÑполÑзоваÑели и полÑзоваÑели Ñ ÑооÑвеÑÑÑвÑÑÑим пÑавомSET.track_wal_io_timing(boolean) #ÐклÑÑÐ°ÐµÑ Ð·Ð°Ð¼ÐµÑ Ð²Ñемени опеÑаÑий ввода-вÑвода WAL. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð¾ÑклÑÑÑн, Ñак как Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ замеÑа ÑÑебÑеÑÑÑ Ð¿Ð¾ÑÑоÑнно запÑаÑиваÑÑ ÑекÑÑее вÑÐµÐ¼Ñ Ñ Ð¾Ð¿ÐµÑаÑионной ÑиÑÑемÑ, ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð·Ð½Ð°ÑиÑелÑно замедлиÑÑ ÑабоÑÑ Ð½Ð° некоÑоÑÑÑ Ð¿Ð»Ð°ÑÑоÑÐ¼Ð°Ñ . ÐÐ»Ñ Ð¾ÑÐµÐ½Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¸Ð·Ð´ÐµÑжек замеÑа вÑемени на ваÑей плаÑÑоÑме можно воÑполÑзоваÑÑÑÑ ÑÑилиÑой pg_test_timing. СÑаÑиÑÑÐ¸ÐºÑ Ð²Ð²Ð¾Ð´Ð°-вÑвода можно полÑÑиÑÑ ÑеÑез пÑедÑÑавление
pg_stat_wal. ÐзмениÑÑ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð³ÑÑ ÑолÑко ÑÑпеÑполÑзоваÑели и полÑзоваÑели Ñ ÑооÑвеÑÑÑвÑÑÑим пÑавомSET.track_functions(enum) #ÐклÑÑÐ°ÐµÑ Ð¿Ð¾Ð´ÑÑÑÑ Ð²Ñзовов ÑÑнкÑий и вÑемени Ð¸Ñ Ð²ÑполнениÑ. ÐнаÑение
plвклÑÑÐ°ÐµÑ Ð¾ÑÑлеживание ÑолÑко ÑÑнкÑий на пÑоÑедÑÑном ÑзÑке, аallâ Ñакже ÑÑнкÑий на ÑзÑÐºÐ°Ñ SQL и C. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ ânone, Ñо еÑÑÑ ÑÐ±Ð¾Ñ ÑÑаÑиÑÑики по ÑÑнкÑиÑм оÑклÑÑÑн. ÐзмениÑÑ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð³ÑÑ ÑолÑко ÑÑпеÑполÑзоваÑели и полÑзоваÑели Ñ ÑооÑвеÑÑÑвÑÑÑим пÑавомSET.ÐÑимеÑание
ФÑнкÑии на ÑзÑке SQL, доÑÑаÑоÑно пÑоÑÑÑе Ð´Ð»Ñ Â«Ð²Ð½ÐµÐ´ÑениÑ» в вÑзÑваÑÑий запÑоÑ, оÑÑлеживаÑÑÑÑ Ð½Ðµ бÑдÑÑ Ð²Ð½Ðµ завиÑимоÑÑи Ð¾Ñ ÑÑого паÑамеÑÑа.
stats_fetch_consistency(enum) #ÐпÑеделÑÐµÑ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ðµ пÑи многокÑаÑном обÑаÑении к накопиÑелÑной ÑÑаÑиÑÑике в ÑÐ°Ð¼ÐºÐ°Ñ ÑÑанзакÑии. Ðогда задано знаÑение
none, ÑÑÑÑÑики пÑи каждом обÑаÑении извлекаÑÑÑÑ Ð¸Ð· обÑей памÑÑи. Ðогда задано знаÑениеcache, пÑи пеÑвом обÑаÑении кеÑиÑÑеÑÑÑ ÑÑаÑиÑÑика по конкÑеÑÐ½Ð¾Ð¼Ñ Ð¾Ð±ÑекÑÑ; ÑбÑаÑÑваеÑÑÑ Ð¾Ð½Ð° пÑи завеÑÑении ÑÑанзакÑии или пÑи вÑзовеpg_stat_clear_snapshot(). Ðогда задано знаÑениеsnapshot, пÑи пеÑвом обÑаÑении кеÑиÑÑеÑÑÑ Ð²ÑÑ ÑÑаÑиÑÑика, имеÑÑаÑÑÑ Ð² ÑекÑÑей базе даннÑÑ ; ÑбÑаÑÑваеÑÑÑ Ð¾Ð½Ð° Ñакже пÑи завеÑÑении ÑÑанзакÑии или пÑи вÑзовеpg_stat_clear_snapshot(). ÐÑи изменении ÑÑого паÑамеÑÑа в ÑÑанзакÑии ÑбÑаÑÑваеÑÑÑ Ñнимок ÑÑаÑиÑÑики. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ âcache.ÐÑимеÑание
ÐаÑианÑ
noneболÑÑе Ð¿Ð¾Ð´Ñ Ð¾Ð´Ð¸Ñ Ð´Ð»Ñ ÑиÑÑем мониÑоÑинга. Ðн наиболее ÑÑÑекÑивен, еÑли пÑоиÑÑ Ð¾Ð´Ð¸Ñ ÑолÑко одно обÑаÑение к знаÑениÑм. ÐаÑианÑcacheгаÑанÑиÑÑеÑ, ÑÑо пÑи повÑоÑном обÑаÑении бÑдÑÑ Ð¿Ð¾Ð»ÑÑÐµÐ½Ñ Ñе же знаÑениÑ; ÑÑо нÑжно Ð´Ð»Ñ Ð·Ð°Ð¿ÑоÑов, ÑодеÑжаÑÐ¸Ñ , напÑимеÑ, замкнÑÑÑе ÑоединениÑ. ÐаÑианÑsnapshotÐ¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·ÐµÐ½ пÑи инÑеÑакÑивном пÑоÑмоÑÑе ÑÑаÑиÑÑики, но Ñ Ð½Ð¸Ð¼ ÑвÑÐ·Ð°Ð½Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе издеÑжки, оÑобенно еÑли в базе много обÑекÑов.
20.9.2. ÐониÑоÑинг ÑÑаÑиÑÑики #
compute_query_id(enum) #ÐклÑÑÐ°ÐµÑ Ð²ÑÑиÑление иденÑиÑикаÑоÑа запÑоÑа в ÑдÑе. ÐденÑиÑикаÑоÑÑ Ð·Ð°Ð¿ÑоÑа могÑÑ Ð¾ÑобÑажаÑÑÑÑ Ð² пÑедÑÑавлении
pg_stat_activityв вÑводеEXPLAINили запиÑÑваÑÑÑÑ Ð² жÑÑнал, пÑи заданнÑм ÑооÑвеÑÑÑвÑÑÑим обÑазом паÑамеÑÑе log_line_prefix. ÐденÑиÑикаÑоÑÑ Ð·Ð°Ð¿ÑоÑов Ñакже Ð´Ð¾Ð»Ð¶Ð½Ñ Ð²ÑÑиÑлÑÑÑÑÑ Ð´Ð»Ñ ÑаÑÑиÑÐµÐ½Ð¸Ñ pg_stat_statements. ÐбÑаÑиÑе внимание, ÑÑо в каÑеÑÑве алÑÑеÑнаÑÐ¸Ð²Ñ Ð¼Ð¾Ð¶Ð½Ð¾ иÑполÑзоваÑÑ Ð²Ð½ÐµÑний модÑлÑ, еÑли меÑод вÑÑиÑÐ»ÐµÐ½Ð¸Ñ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑа запÑоÑа в ÑдÑе ÑвлÑеÑÑÑ Ð½ÐµÐ¿ÑиемлемÑм. ÐÑо вÑÑиÑление в ÑдÑе нÑжно полноÑÑÑÑ Ð¾ÑклÑÑиÑÑ. ÐопÑÑÑимÑе знаÑениÑ:off(вÑегда оÑклÑÑено);on(вÑегда вклÑÑено);auto, коÑоÑое позволÑÐµÑ Ñаким модÑлÑм, как pg_stat_statements, авÑомаÑиÑеÑки вклÑÑиÑÑ Ð´Ð°Ð½Ð½Ð¾Ðµ вÑÑиÑление;regress, коÑоÑое дейÑÑвÑÐµÑ Ñак же, какauto, но иденÑиÑикаÑÐ¾Ñ Ð·Ð°Ð¿ÑоÑа не показÑваеÑÑÑ Ð² вÑводе командÑEXPLAIN, ÑÑо облегÑÐ°ÐµÑ Ð°Ð²ÑомаÑиÑеÑкое ÑегÑеÑÑионное ÑеÑÑиÑование. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð·Ð½Ð°Ñение ÑÑого паÑамеÑÑа âauto.ÐÑимеÑание
ЧÑÐ¾Ð±Ñ Ð´Ð»Ñ Ð·Ð°Ð¿ÑоÑа гаÑанÑиÑованно вÑÑиÑлÑлÑÑ Ð¸ оÑобÑажалÑÑ ÑолÑко один иденÑиÑикаÑоÑ, вÑÑиÑлÑÑÑие его ÑаÑÑиÑÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð²ÑдаваÑÑ Ð¾ÑибкÑ, еÑли иденÑиÑикаÑÐ¾Ñ Ð·Ð°Ð¿ÑоÑа Ñже бÑл вÑÑиÑлен.
log_statement_stats(boolean)log_parser_stats(boolean)log_planner_stats(boolean)log_executor_stats(boolean) #ÐÑи паÑамеÑÑÑ Ð²ÐºÐ»ÑÑаÑÑ Ð²Ñвод ÑÑаÑиÑÑики по пÑоизводиÑелÑноÑÑи ÑооÑвеÑÑÑвÑÑÑего модÑÐ»Ñ Ð² пÑоÑокол ÑабоÑÑ ÑеÑвеÑа. ÐÑо гÑÑбÑй инÑÑÑÑÐ¼ÐµÐ½Ñ Ð¿ÑоÑилиÑованиÑ, Ð¿Ð¾Ñ Ð¾Ð¶Ð¸Ð¹ на ÑÑнкÑиÑ
getrusage()в опеÑаÑионной ÑиÑÑеме. ÐаÑамеÑÑlog_statement_statsвклÑÑÐ°ÐµÑ Ð²Ñвод обÑей ÑÑаÑиÑÑики по опеÑаÑоÑам, Ñогда как дÑÑгие ÑпÑавлÑÑÑ ÑÑаÑиÑÑикой по модÑлÑм (ÑазбоÑ, планиÑование, вÑполнение). ÐклÑÑиÑÑlog_statement_statsодновÑеменно Ñ Ð¿Ð°ÑамеÑÑами, ÑпÑавлÑÑÑими модÑлÑми, нелÑзÑ. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð²Ñе ÑÑи паÑамеÑÑÑ Ð¾ÑклÑÑенÑ. ÐзмениÑÑ ÑÑи паÑамеÑÑÑ Ð¼Ð¾Ð³ÑÑ ÑолÑко ÑÑпеÑполÑзоваÑели и полÑзоваÑели Ñ ÑооÑвеÑÑÑвÑÑÑим пÑавомSET.