F.40. pg_stat_kcache — статистика о реальных операциях чтения и записи#
F.40. pg_stat_kcache — статистика о реальных операциях чтения и записи #
Версия: 2.3.0
F.40.1. Обзор #
Собирает статистику о реальных операциях чтения и записи, выполняемых на уровне файловой системы.
F.40.2. Установка #
Расширение теперь доступно. Однако, так как оно требует некоторой общей
памяти для хранения своих счетчиков, модуль должен быть загружен при
запуске Tantor BE. Таким образом, вы должны добавить модуль в
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 BE, можно установить расширение в каждой базе данных, где вам нужно получить доступ к статистике:
mydb=# CREATE EXTENSION pg_stat_kcache;
F.40.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.40.4. Использование #
pg_stat_kcache создает несколько объектов.
F.40.4.1. pg_stat_kcache view #
| Имя | Тип | Описание |
|---|---|---|
| datname | name | Название базы данных |
| plan_user_time | double precision | Время пользовательского процессора, использованное для планирования запросов в этой базе данных, в секундах и миллисекундах (если 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 включен, в противном случае ноль) |
| plan_nswaps | bigint | Количество планируемых перестановок в этом базе данных (если pg_stat_kcache.track_planning включен, иначе ноль) |
| plan_reads | 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 включен, иначе ноль) |
| plan_msgsnds | 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.40.4.2. pg_stat_kcache_detail представление #
| Имя | Тип | Описание |
|---|---|---|
| query | text | Текст запроса |
| top | bool | Истина, если оператор является верхнего уровня |
| datname | name | Имя базы данных |
| rolname | name | Имя роли |
| plan_user_time | double precision | Пользовательское время CPU, использованное для планирования запроса, в секундах и миллисекундах (если pg_stat_kcache.track_planning включен, иначе ноль) |
| plan_system_time | double precision | Системное время CPU, использованное для планирования запроса, в секундах и миллисекундах (если pg_stat_kcache.track_planning включен, иначе ноль) |
| plan_minflts | bigint | Количество возвратов страниц (мягкие ошибки страниц) при планировании оператора (если pg_stat_kcache.track_planning включен, иначе ноль) |
| plan_majflts | bigint | Количество отказов страниц (жестких отказов страниц) при планировании запроса (если pg_stat_kcache.track_planning включен, иначе ноль) |
| plan_nswaps | bigint | Количество перестановок, планируемых оператором (если pg_stat_kcache.track_planning включен, в противном случае ноль) |
| plan_reads | 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 включен, иначе ноль) |
| plan_msgsnds | 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.40.4.3. функция pg_stat_kcache_reset #
Сбрасывает статистику, собранную pg_stat_kcache. Может быть вызвано суперпользователями:
pg_stat_kcache_reset()
F.40.4.4. функция pg_stat_kcache #
Эта функция является функцией, возвращающей набор, которая выводит содержимое счетчиков структуры общей памяти. Эта функция используется представлением pg_stat_kcache. Функция может быть вызвана любым пользователем:
SELECT * FROM pg_stat_kcache();
Он предоставляет следующие столбцы:
| Имя | Тип | Описание |
|---|---|---|
| queryid | bigint | идентификатор запроса pg_stat_statements |
| top | bool | Истина, если оператор является верхнего уровня |
| userid | oid | OID базы данных |
| dbid | oid | OID базы данных |
| plan_user_time | double precision | Пользовательское время CPU, использованное для планирования запроса, в секундах и миллисекундах (если pg_stat_kcache.track_planning включен, иначе ноль) |
| plan_system_time | double precision | Системное время CPU, использованное для планирования запроса, в секундах и миллисекундах (если pg_stat_kcache.track_planning включен, иначе ноль) |
| plan_minflts | bigint | Количество возвратов страниц (мягкие ошибки страниц) при планировании оператора (если pg_stat_kcache.track_planning включен, иначе ноль) |
| plan_majflts | bigint | Количество отказов страниц (жестких отказов страниц) при планировании запроса (если pg_stat_kcache.track_planning включен, иначе ноль) |
| plan_nswaps | bigint | Количество перестановок, планируемых оператором (если pg_stat_kcache.track_planning включен, в противном случае ноль) |
| plan_reads | 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 включен, иначе ноль) |
| plan_msgsnds | 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.40.5. Обновление расширения #
Обратите внимание, что для изменений, отличных от SQL-объектов, требуется перезапуск Tantor BE. Большая часть нового кода будет активирована сразу после перезапуска, независимо от того, обновлено ли расширение, так как расширение только отвечает за отображение внутренней структуры данных в SQL.
Пожалуйста, обратите внимание, что когда поля функции, возвращающей набор, изменяются, требуется перезапуск Tantor BE для загрузки новой версии расширения. До выполнения перезапуска обновление расширения завершится неудачей с сообщениями, подобными:
не удалось найти функцию "pg_stat_kcache_2_2" в файле .../pg_stat_kcache.so
F.40.6. Ошибки и ограничения #
Известных ошибок нет.
Мы предполагаем, что блок ядра составляет 512 байт. Это верно для Linux, но может не соответствовать действительности для другой реализации Unix.
На платформах без родной функции 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.