18.9. Статистика выполнения#
18.9. Статистика выполнения #
18.9.1. Накопительная статистика запросов и индексов #
Эти параметры управляют системой накопительной статистики на уровне сервера.
При включении собранные данные можно получить через системные представления pg_stat и pg_statio.
Дополнительную информацию см. в разделе Глава 26.
track_activities(boolean) #Включает сбор информации о текущей выполняемой команде каждой сессии, вместе с ее идентификатором и временем начала выполнения. Этот параметр включен по умолчанию. Обратите внимание, что, даже когда он включен, эта информация видна только суперпользователям, ролям с привилегиями роли
pg_read_all_statsи пользователю, владеющему отчетами о сессиях (включая сессии, принадлежащие роли, у которой есть соответствующие привилегии), поэтому это не должно представлять угрозу безопасности. Изменить этот параметр могут только суперпользователи и пользователи с соответствующими привилегиямиSET.track_activity_query_size(integer) #Определяет количество памяти, зарезервированной для хранения текста текущей выполняемой команды для каждой активной сессии, для поля
pg_stat_activity.query. Если это значение указано без единиц измерения, оно считается заданным в байтах. Значение по умолчанию - 1024 байта. Этот параметр может быть установлен только при запуске сервера.track_counts(boolean) #Включает сбор статистики о деятельности базы данных. Этот параметр включен по умолчанию, поскольку демон автоочистки нуждается в собранной информации. Изменить это значение могут только суперпользователи и пользователи с соответствующим привилегией
SET.track_cost_delay_timing(boolean) #Включает замер задержки очистки, основанной на стоимости (см. Раздел 18.10.2). Этот параметр по умолчанию отключён, так как он многократно запрашивает текущее время у операционной системы, что может повлечь значительные издержки на некоторых платформах. Можно использовать инструмент pg_test_timing, для оценки издержек на замер времени в вашей системе. Информация о времени задержки очистки по стоимости, отображается в представлениях
pg_stat_progress_vacuum,pg_stat_progress_analyze, в выводе VACUUM и ANALYZE при использовании параметраVERBOSE, а также от процесса автоочистки, выполняющего vacuum и analyze, когда установлен параметр log_autovacuum_min_duration. Только суперпользователи и пользователи с соответствующим правомSETмогут изменять этот параметр.track_io_timing(boolean) #Включает замер времени ожидания ввода-вывода базы данных. Этот параметр по умолчанию отключён, так как он будет многократно запрашивать текущее время у операционной системы, что может привести к значительным издержкам на некоторых платформах. Можно использовать инструмент pg_test_timing для замера издержек на измерение времени в вашей системе. Информация о времени ввода-вывода отображается в представлениях
pg_stat_database,pg_stat_io(еслиobjectне в значенииwal), в выводе функцииpg_stat_get_backend_io()(еслиobjectне в значенииwal), в выводе EXPLAIN при использовании параметраBUFFERS, в выводе VACUUM при использовании параметраVERBOSE, от процесса автоочистки выполняющего vacuum и analyze, когда установлен параметр log_autovacuum_min_duration, а также в pg_stat_statements. Изменять этот параметр могут только суперпользователи и пользователи с соответствующим правомSET.track_wal_io_timing(boolean) #Включает замер времени ожидания ввода-вывода WAL. Этот параметр по умолчанию отключён, так как он будет многократно запрашивать текущее время у операционной системы, что может привести к значительным издержкам на некоторых платформах. Можно использовать инструмент pg_test_timing, для замера издержек на измерение времени в вашей системе. Информация о времени ввода-вывода отображается в представлении
pg_stat_ioдляobjectв значенииwalи в выводе функцииpg_stat_get_backend_io()дляobjectв значенииwal. Изменять этот параметр могут только суперпользователи и пользователи с соответствующим правомSET.track_functions(enum) #Включает отслеживание количества вызовов функций и затраченного времени. Укажите
pl, чтобы отслеживать только функции процедурных языков,all, чтобы также отслеживать функции SQL и языка C. По умолчанию установлено значениеnone, которое отключает отслеживание статистики функций. Изменить это значение могут только суперпользователи и пользователи с соответствующими привилегиямиSET.Примечание
SQL-языковые функции, достаточно простые для “встраивания” в вызывающий запрос, не будут отслеживаться, независимо от этой настройки.
-
enable_pgstat_for_temp_rel(boolean) # Включает сбор статистики подсистемой
pgstatдля временных таблиц. При значенииtrueактивность временных отношений отражается в глобальной хэш-таблицеpg_stat. При значенииfalseактивность временных отношений не отражается в глобальной хэш-таблицеpgstat, что решает проблему блокировок LWLock и деградации производительности при частых операциях с временными таблицами. Значение по умолчанию —true.stats_fetch_consistency(enum) #Определяет поведение при обращении к накопительной статистике несколько раз в течение транзакции. При установке значения
noneпри каждом обращении счетчики повторно извлекаются из общей памяти. Когда установлено значениеcache, при первом доступе к статистике для объекта эта статистика кешируется до конца транзакции, если не будет вызвана функцияpg_stat_clear_snapshot(). Когда установлено значениеsnapshot, при первом доступе к статистике вся статистика, доступная в текущей базе данных, кешируется до конца транзакции, если не будет вызвана функцияpg_stat_clear_snapshot(). Изменение этого параметра в транзакции приводит к отмене моментального снимка статистики. Значение по умолчанию -cache.Примечание
noneнаиболее подходит для систем мониторинга. Если значения доступны только один раз, это наиболее эффективно.cacheгарантирует, что повторные обращения возвращают те же значения, что важно для запросов, включающих например, самосоединения.snapshotможет быть полезен при интерактивном анализе статистики, но вызывает дополнительные издержки, особенно если существует много объектов базы данных.
18.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()операционной системы Unix.log_statement_statsотображает общую статистику запросов, а остальные отображают статистику по модулям.log_statement_statsне может быть включен вместе с любыми опциями по модулям. Все эти опции отключены по умолчанию. Изменить эти настройки могут только суперпользователи и пользователи с соответствующими привилегиямиSET.