F.46. pg_stat_kcache#

F.46. pg_stat_kcache

F.46. pg_stat_kcache #

Собирает статистику о реальных операциях чтения и записи, выполняемых на уровне файловой системы.

F.46.1. О pg_stat_kcache #

Версия: 2.3.0

GitHub

F.46.2. Установка #

Расширение теперь доступно. Однако, так как оно требует некоторой общей памяти для хранения своих счетчиков, модуль должен быть загружен при запуске Tantor SE-1C. Таким образом, вы должны добавить модуль в shared_preload_libraries в вашем postgresql.conf. Для учета изменений требуется перезапуск сервера. Поскольку это расширение зависит от pg_stat_statements, его также необходимо добавить в shared_preload_libraries.

Добавьте следующие параметры в ваш postgresql.conf:

# postgresql.conf
shared_preload_libraries = 'pg_stat_statements,pg_stat_kcache'

После перезапуска вашего кластера Tantor SE-1C, вы можете установить расширение в каждой базе данных, где вам нужно получить доступ к статистике:

mydb=# CREATE EXTENSION pg_stat_kcache;

F.46.3. Конфигурация #

Следующие GUC могут быть настроены в postgresql.conf:

  • pg_stat_kcache.linux_hz (int, по умолчанию -1): информирует pg_stat_kcache о параметре конфигурации linux CONFIG_HZ. Это используется pg_stat_kcache для компенсации ошибок выборки. Значение по умолчанию -1, пытается угадать его при запуске.

  • pg_stat_kcache.track (enum, по умолчанию top): управляет тем, какие операторы отслеживаются pg_stat_kcache. Укажите top для отслеживания операторов верхнего уровня (тех, которые выполняются непосредственно клиентами), all для отслеживания также вложенных операторов (таких как операторы, вызываемые внутри функций), или none для отключения сбора статистики операторов.

  • pg_stat_kcache.track_planning (bool, по умолчанию выключено): управляет отслеживанием операций планирования и их продолжительности с помощью pg_stat_kcache.

F.46.4. Использование #

pg_stat_kcache создает несколько объектов.

F.46.4.1. pg_stat_kcache view #

Имя Тип Описание
datname name Название базы данных
планировочное_время_пользователя двойная точность Время пользовательского процессора, использованное для планирования запросов в этой базе данных, в секундах и миллисекундах (если pg_stat_kcache.track_planning включен, иначе ноль)
plan_system_time double precision Системное время ЦП, использованное для планирования операторов в этой базе данных, в секундах и миллисекундах (если pg_stat_kcache.track_planning включен, иначе ноль)
plan_minflts bigint Количество возвратов страниц (мягких ошибок страниц) в планирующих запросах в этой базе данных (если pg_stat_kcache.track_planning включен, иначе ноль)
plan_majflts bigint Количество отказов страниц (жестких отказов страниц) при планировании запросов в этой базе данных (если pg_stat_kcache.track_planning включен, в противном случае ноль)
план_перестановок bigint Количество планируемых перестановок в этом базе данных (если pg_stat_kcache.track_planning включен, иначе ноль)
план_чтения bigint Количество байт, прочитанных файловой системой при планировании операторов в этой базе данных (если pg_stat_kcache.track_planning включен, иначе ноль)
plan_reads_blks bigint Количество 8K блоков, прочитанных файловой системой при планировании запросов в этой базе данных (если pg_stat_kcache.track_planning включен, иначе ноль)
план_записи bigint Количество байт, записанных файловой системой при планировании операторов в этой базе данных (если pg_stat_kcache.track_planning включен, иначе ноль)
plan_writes_blks bigint Количество 8K блоков, записанных файловой системой при планировании запросов в этой базе данных (если pg_stat_kcache.track_planning включен, иначе ноль)
план_сообщ_отпр bigint Количество отправленных IPC сообщений при планировании запросов в этой базе данных (если pg_stat_kcache.track_planning включен, иначе ноль)
plan_msgrcvs bigint Количество полученных IPC сообщений при планировании запросов в этой базе данных (если pg_stat_kcache.track_planning включен, иначе ноль)
plan_nsignals bigint Количество сигналов, полученных при планировании запросов в этой базе данных (если pg_stat_kcache.track_planning включен, иначе ноль)
plan_nvcsws bigint Количество добровольных переключений контекста планирования запросов в этой базе данных (если pg_stat_kcache.track_planning включен, иначе ноль)
plan_nivcsws bigint Количество принудительных переключений контекста при планировании запросов в этой базе данных (если pg_stat_kcache.track_planning включен, иначе ноль)
exec_user_time double precision Время использования процессора пользователем при выполнении операторов в этой базе данных, в секундах и миллисекундах
exec_system_time double precision Системное время CPU, использованное для выполнения операторов в этой базе данных, в секундах и миллисекундах
exec_minflts bigint Количество возвратов страниц (мягких ошибок страниц) при выполнении операторов в этой базе данных
exec_majflts bigint Количество отказов страниц (жестких отказов страниц) при выполнении операторов в этой базе данных
exec_nswaps bigint Количество обменов выполняющих операторов в этой базе данных
exec_reads bigint Количество байт, прочитанных файловой системой при выполнении операторов в этой базе данных
exec_reads_blks bigint Количество 8K блоков, прочитанных файловой системой при выполнении операторов в этой базе данных
exec_writes bigint Количество байтов, записанных файловой системой при выполнении операторов в этой базе данных
exec_writes_blks bigint Количество 8K блоков, записанных файловой системой при выполнении операторов в этой базе данных
exec_msgsnds bigint Количество отправленных IPC сообщений при выполнении операторов в этой базе данных
exec_msgrcvs bigint Количество полученных IPC сообщений при выполнении операторов в этой базе данных
exec_nsignals bigint Количество сигналов, полученных при выполнении операторов в этой базе данных
exec_nvcsws bigint Количество добровольных переключений контекста при выполнении операторов в этой базе данных
exec_nivcsws bigint Количество принудительных переключений контекста при выполнении операторов в этой базе данных

F.46.4.2. pg_stat_kcache_detail представление #

Имя Тип Описание
запрос текст Текст запроса
верхний bool Истина, если оператор является верхнего уровня
datname name Имя базы данных
rolname имя Имя роли
планируемое_пользовательское_время двойная точность Пользовательское время CPU, использованное для планирования запроса, в секундах и миллисекундах (если pg_stat_kcache.track_planning включен, иначе ноль)
план_системное_время двойная точность Системное время CPU, использованное для планирования запроса, в секундах и миллисекундах (если pg_stat_kcache.track_planning включен, иначе ноль)
plan_minflts bigint Количество возвратов страниц (мягкие ошибки страниц) при планировании оператора (если pg_stat_kcache.track_planning включен, иначе ноль)
plan_majflts bigint Количество отказов страниц (жестких отказов страниц) при планировании запроса (если pg_stat_kcache.track_planning включен, иначе ноль)
план_перестановок bigint Количество перестановок, планируемых оператором (если pg_stat_kcache.track_planning включен, в противном случае ноль)
план_чтения bigint Количество байт, прочитанных файловой системой при планировании запроса (если pg_stat_kcache.track_planning включен, иначе ноль)
plan_reads_blks bigint Количество 8K блоков, прочитанных файловой системой при планировании запроса (если pg_stat_kcache.track_planning включен, иначе ноль)
plan_writes bigint Количество байт, записанных файловой системой при планировании оператора (если включен pg_stat_kcache.track_planning, иначе ноль)
plan_writes_blks bigint Количество 8K блоков, записанных файловой системой при планировании запроса (если pg_stat_kcache.track_planning включен, иначе ноль)
план_сообщ_отпр bigint Количество отправленных IPC сообщений при планировании запроса (если pg_stat_kcache.track_planning включен, иначе ноль)
plan_msgrcvs bigint Количество полученных IPC сообщений при планировании оператора (если pg_stat_kcache.track_planning включен, в противном случае ноль)
план_сигналов bigint Количество сигналов, полученных при планировании запроса (если pg_stat_kcache.track_planning включен, иначе ноль)
plan_nvcsws bigint Количество добровольных переключений контекста при планировании оператора (если pg_stat_kcache.track_planning включен, иначе ноль)
plan_nivcsws bigint Количество принудительных переключений контекста при планировании запроса (если pg_stat_kcache.track_planning включен, иначе ноль)
exec_user_time double precision Время пользовательского процессора, использованное для выполнения оператора, в секундах и миллисекундах
exec_system_time double precision Системное время CPU, использованное для выполнения оператора, в секундах и миллисекундах
exec_minflts bigint Количество возвратов страниц (мягких ошибок страниц) при выполнении операторов
exec_majflts bigint Количество отказов страниц (жестких отказов страниц) при выполнении операторов
exec_nswaps bigint Количество свопов при выполнении операторов
exec_reads bigint Количество байт, прочитанных файловой системой при выполнении операторов
exec_reads_blks bigint Количество 8K блоков, прочитанных файловой системой при выполнении операторов
exec_writes bigint Количество байт, записанных файловой системой при выполнении операторов
exec_writes_blks bigint Количество 8K блоков, записанных файловой системой при выполнении операторов
exec_msgsnds bigint Количество отправленных IPC сообщений при выполнении операторов
exec_msgrcvs bigint Количество полученных IPC сообщений при выполнении операторов
exec_nsignals bigint Количество сигналов, полученных при выполнении операторов
exec_nvcsws bigint Количество добровольных переключений контекста при выполнении операторов
exec_nivcsws bigint Количество принудительных переключений контекста при выполнении операторов

F.46.4.3. функция pg_stat_kcache_reset #

Сбрасывает статистику, собранную pg_stat_kcache. Может быть вызвано суперпользователями:

pg_stat_kcache_reset()

F.46.4.4. функция pg_stat_kcache #

Эта функция является функцией, возвращающей набор, которая выводит содержимое счетчиков структуры общей памяти. Эта функция используется представлением pg_stat_kcache. Функция может быть вызвана любым пользователем:

SELECT * FROM pg_stat_kcache();

Он предоставляет следующие столбцы:

Имя Тип Описание
queryid bigint идентификатор запроса pg_stat_statements
верхний bool Истина, если оператор является верхнего уровня
userid oid OID базы данных
dbid oid OID базы данных
планируемое_пользовательское_время двойная точность Пользовательское время CPU, использованное для планирования запроса, в секундах и миллисекундах (если pg_stat_kcache.track_planning включен, иначе ноль)
план_системное_время двойная точность Системное время CPU, использованное для планирования запроса, в секундах и миллисекундах (если pg_stat_kcache.track_planning включен, иначе ноль)
plan_minflts bigint Количество возвратов страниц (мягкие ошибки страниц) при планировании оператора (если pg_stat_kcache.track_planning включен, иначе ноль)
plan_majflts bigint Количество отказов страниц (жестких отказов страниц) при планировании запроса (если pg_stat_kcache.track_planning включен, иначе ноль)
план_перестановок bigint Количество перестановок, планируемых оператором (если pg_stat_kcache.track_planning включен, в противном случае ноль)
план_чтения bigint Количество байт, прочитанных файловой системой при планировании запроса (если pg_stat_kcache.track_planning включен, иначе ноль)
plan_reads_blks bigint Количество 8K блоков, прочитанных файловой системой при планировании запроса (если pg_stat_kcache.track_planning включен, иначе ноль)
plan_writes bigint Количество байт, записанных файловой системой при планировании оператора (если включен pg_stat_kcache.track_planning, иначе ноль)
plan_writes_blks bigint Количество 8K блоков, записанных файловой системой при планировании запроса (если pg_stat_kcache.track_planning включен, иначе ноль)
план_сообщ_отпр bigint Количество отправленных IPC сообщений при планировании запроса (если pg_stat_kcache.track_planning включен, иначе ноль)
plan_msgrcvs bigint Количество полученных IPC сообщений при планировании оператора (если pg_stat_kcache.track_planning включен, в противном случае ноль)
план_сигналов bigint Количество сигналов, полученных при планировании запроса (если pg_stat_kcache.track_planning включен, иначе ноль)
plan_nvcsws bigint Количество добровольных переключений контекста при планировании оператора (если pg_stat_kcache.track_planning включен, иначе ноль)
plan_nivcsws bigint Количество принудительных переключений контекста при планировании запроса (если pg_stat_kcache.track_planning включен, иначе ноль)
exec_user_time double precision Время пользовательского процессора, использованное для выполнения оператора, в секундах и миллисекундах
exec_system_time double precision Системное время CPU, использованное для выполнения оператора, в секундах и миллисекундах
exec_minflts bigint Количество возвратов страниц (мягких ошибок страниц) при выполнении операторов
exec_majflts bigint Количество отказов страниц (жестких отказов страниц) при выполнении операторов
exec_nswaps bigint Количество свопов при выполнении операторов
exec_reads bigint Количество байт, прочитанных файловой системой при выполнении операторов
exec_reads_blks bigint Количество 8K блоков, прочитанных файловой системой при выполнении операторов
exec_writes bigint Количество байт, записанных файловой системой при выполнении операторов
exec_writes_blks bigint Количество 8K блоков, записанных файловой системой при выполнении операторов
exec_msgsnds bigint Количество отправленных IPC сообщений при выполнении операторов
exec_msgrcvs bigint Количество полученных IPC сообщений при выполнении операторов
exec_nsignals bigint Количество сигналов, полученных при выполнении операторов
exec_nvcsws bigint Количество добровольных переключений контекста при выполнении операторов
exec_nivcsws bigint Количество принудительных переключений контекста при выполнении операторов

F.46.5. Обновление расширения #

Обратите внимание, что для изменений, отличных от SQL-объектов, требуется перезапуск Tantor SE-1C. Большая часть нового кода будет активирована сразу после перезапуска, независимо от того, обновлено ли расширение, так как расширение только отвечает за отображение внутренней структуры данных в SQL.

Пожалуйста, обратите внимание, что когда поля функции, возвращающей набор, изменяются, требуется перезапуск Tantor SE-1C для загрузки новой версии расширения. До выполнения перезапуска обновление расширения завершится неудачей с сообщениями, подобными:

не удалось найти функцию "pg_stat_kcache_2_2" в файле .../pg_stat_kcache.so

F.46.6. Ошибки и ограничения #

Известных ошибок нет.

Мы предполагаем, что блок ядра составляет 512 байт. Это верно для Linux, но может не соответствовать действительности для другой реализации Unix.

См.: http://lkml.indiana.edu/hypermail/linux/kernel/0703.2/0937.html

На платформах без родной функции getrusage(2), все поля, кроме user_time и system_time, будут NULL.

На платформах с родной функцией getrusage(2), некоторые поля могут не поддерживаться. Это поведение зависит от платформы, пожалуйста, обратитесь к руководству по вашей платформе getrusage(2) для получения более подробной информации.

Если pg_stat_kcache.track установлено в all, pg_stat_kcache отслеживает вложенные операторы. Максимальное количество уровней вложенности, которые будут отслеживаться, ограничено 64, чтобы упростить реализацию, но этого должно быть достаточно для разумных случаев использования.

Даже если pg_stat_kcache.track установлено в all, представление pg_stat_kcache учитывает только статистику верхнеуровневых операторов. Таким образом, существует случай, когда, хотя пользовательское время CPU, использованное для планирования вложенного оператора, велико, plan_user_time представления pg_stat_kcache мало. В таком случае пользовательское время CPU, использованное для планирования вложенного оператора, учитывается в exec_user_time.

F.46.7. Авторы #

pg_stat_kcache является оригинальной разработкой Томаса Рейса, с большими частями кода, вдохновленными pg_stat_plans. Жюльен Рухауд также внес вклад в некоторые части расширения.

Благодарим Питера Геогегана за предоставление большого вдохновения с pg_stat_plans, чтобы мы могли написать это расширение довольно просто.

F.46.8. Лицензия #

pg_stat_kcache является свободным программным обеспечением, распространяемым под лицензией PostgreSQL.

Авторские права (c) 2014-2017, Dalibo Авторские права (c) 2018-2022, Команда PoWA