18.9. Статистика времени выполнения #
18.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может быть полезен при интерактивном просмотре статистики, но с ним связаны дополнительные издержки, особенно если в базе много объектов.
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()в операционной системе. Параметрlog_statement_statsвключает вывод общей статистики по операторам, тогда как другие управляют статистикой по модулям (разбор, планирование, выполнение). Включитьlog_statement_statsодновременно с параметрами, управляющими модулями, нельзя. По умолчанию все эти параметры отключены. Изменить эти параметры могут только суперпользователи и пользователи с соответствующим правомSET.
18.9. Run-time Statistics #
18.9.1. Cumulative Query and Index Statistics #
These parameters control the server-wide cumulative statistics system. When enabled, the data that is collected can be accessed via the pg_stat and pg_statio family of system views. Refer to Chapter 27 for more information.
track_activities(boolean) #Enables the collection of information on the currently executing command of each session, along with its identifier and the time when that command began execution. This parameter is on by default. Note that even when enabled, this information is only visible to superusers, roles with privileges of the
pg_read_all_statsrole and the user owning the sessions being reported on (including sessions belonging to a role they have the privileges of), so it should not represent a security risk. Only superusers and users with the appropriateSETprivilege can change this setting.track_activity_query_size(integer) #Specifies the amount of memory reserved to store the text of the currently executing command for each active session, for the
pg_stat_activity.queryfield. If this value is specified without units, it is taken as bytes. The default value is 1024 bytes. This parameter can only be set at server start.track_counts(boolean) #Enables collection of statistics on database activity. This parameter is on by default, because the autovacuum daemon needs the collected information. Only superusers and users with the appropriate
SETprivilege can change this setting.track_io_timing(boolean) #Enables timing of database I/O calls. This parameter is off by default, as it will repeatedly query the operating system for the current time, which may cause significant overhead on some platforms. You can use the pg_test_timing tool to measure the overhead of timing on your system. I/O timing information is displayed in
pg_stat_database,pg_stat_io, in the output of EXPLAIN when theBUFFERSoption is used, in the output of VACUUM when theVERBOSEoption is used, by autovacuum for auto-vacuums and auto-analyzes, when log_autovacuum_min_duration is set and by pg_stat_statements. Only superusers and users with the appropriateSETprivilege can change this setting.track_wal_io_timing(boolean) #Enables timing of WAL I/O calls. This parameter is off by default, as it will repeatedly query the operating system for the current time, which may cause significant overhead on some platforms. You can use the pg_test_timing tool to measure the overhead of timing on your system. I/O timing information is displayed in
pg_stat_wal. Only superusers and users with the appropriateSETprivilege can change this setting.track_functions(enum) #Enables tracking of function call counts and time used. Specify
plto track only procedural-language functions,allto also track SQL and C language functions. The default isnone, which disables function statistics tracking. Only superusers and users with the appropriateSETprivilege can change this setting.Note
SQL-language functions that are simple enough to be “inlined” into the calling query will not be tracked, regardless of this setting.
stats_fetch_consistency(enum) #Determines the behavior when cumulative statistics are accessed multiple times within a transaction. When set to
none, each access re-fetches counters from shared memory. When set tocache, the first access to statistics for an object caches those statistics until the end of the transaction unlesspg_stat_clear_snapshot()is called. When set tosnapshot, the first statistics access caches all statistics accessible in the current database, until the end of the transaction unlesspg_stat_clear_snapshot()is called. Changing this parameter in a transaction discards the statistics snapshot. The default iscache.Note
noneis most suitable for monitoring systems. If values are only accessed once, it is the most efficient.cacheensures repeat accesses yield the same values, which is important for queries involving e.g. self-joins.snapshotcan be useful when interactively inspecting statistics, but has higher overhead, particularly if many database objects exist.
18.9.2. Statistics Monitoring #
compute_query_id(enum) #Enables in-core computation of a query identifier. Query identifiers can be displayed in the
pg_stat_activityview, usingEXPLAIN, or emitted in the log if configured via the log_line_prefix parameter. The pg_stat_statements extension also requires a query identifier to be computed. Note that an external module can alternatively be used if the in-core query identifier computation method is not acceptable. In this case, in-core computation must be always disabled. Valid values areoff(always disabled),on(always enabled),auto, which lets modules such as pg_stat_statements automatically enable it, andregresswhich has the same effect asauto, except that the query identifier is not shown in theEXPLAINoutput in order to facilitate automated regression testing. The default isauto.Note
To ensure that only one query identifier is calculated and displayed, extensions that calculate query identifiers should throw an error if a query identifier has already been computed.
log_statement_stats(boolean)log_parser_stats(boolean)log_planner_stats(boolean)log_executor_stats(boolean) #For each query, output performance statistics of the respective module to the server log. This is a crude profiling instrument, similar to the Unix
getrusage()operating system facility.log_statement_statsreports total statement statistics, while the others report per-module statistics.log_statement_statscannot be enabled together with any of the per-module options. All of these options are disabled by default. Only superusers and users with the appropriateSETprivilege can change these settings.