19.9. Статистика времени выполнения #
19.9.1. Накопительная статистика по запросам и индексам #
Эти параметры управляют системой накопительной статистики на уровне сервера. Когда сбор статистики включён, собираемые данные можно просмотреть в семействе системных представлений pg_stat
и pg_statio
. За дополнительными сведениями обратитесь к Главе 27.
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
может быть полезен при интерактивном просмотре статистики, но с ним связаны дополнительные издержки, особенно если в базе много объектов.
19.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
.