F.46. pg_stat_kcache#
F.46. pg_stat_kcache #
Собирает статистику о реальных операциях чтения и записи, выполняемых на уровне файловой системы.
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