27.4. Отслеживание выполнения
Postgres Pro имеет возможность отслеживать выполнение определённых команд. В настоящее время такое отслеживание поддерживает только команда VACUUM, но в будущем сфера его применения может быть расширена.
27.4.1. Отслеживание выполнения VACUUM
Во время выполнения VACUUM представление pg_stat_progress_vacuum будет содержать по одной строке для каждого обслуживающего процесса (включая рабочие процессы автоочистки), производящего очистку. Таблицы ниже показывают, какая информация будет отслеживаться, и рассказывают, как её интерпретировать. В настоящее время отслеживание выполнения не поддерживается для команды VACUUM FULL, так что процессы, выполняющие VACUUM FULL, не будут видны в этом представлении.
Таблица 27.21. Представление pg_stat_progress_vacuum
| Столбец | Тип | Описание | 
|---|---|---|
| pid | integer | Идентификатор (PID) этого обслуживающего процесса | 
| datid | oid | OID базы данных, к которой подключён этот обслуживающий процесс. | 
| datname | name | Имя базы данных, к которой подключён этот обслуживающий процесс. | 
| relid | oid | OID очищаемой таблицы. | 
| phase | text | Текущая фаза очистки. См. Таблицу 27.22. | 
| heap_blks_total | bigint | Общее число блоков кучи в таблице. Это число отражает состояние в начале сканирования; блоки, добавленные позже, не будут (и не должны) обрабатываться текущей командой VACUUM. | 
| heap_blks_scanned | bigint | Число просканированных блоков кучи. Так как для оптимизации сканирования применяется карта видимости, некоторые блоки могут пропускаться без осмотра; пропущенные блоки входят в это общее число, так что по завершении очистки это число станет равно heap_blks_total. Этот счётчик увеличивается только в фазеscanning heap. | 
| heap_blks_vacuumed | bigint | Число очищенных блоков кучи. Если в таблице нет индексов, этот счётчик увеличивается только в фазе vacuuming heap(очистка кучи). Блоки, не содержащие «мёртвых» кортежей, при этом пропускаются, так что этот счётчик иногда может увеличиваться резкими рывками. | 
| index_vacuum_count | bigint | Количество завершённых циклов очистки индекса. | 
| max_dead_tuples | bigint | Число «мёртвых» кортежей, которое мы можем сохранить, прежде чем потребуется выполнить цикл очистки индекса, в зависимости от maintenance_work_mem. | 
| num_dead_tuples | bigint | Число «мёртвых» кортежей, собранных со времени последнего цикла очистки индекса. | 
Таблица 27.22. Фазы VACUUM
| Фаза | Описание | 
|---|---|
| initializing | Инициализация — VACUUMготовится начать сканирование кучи. Эта фаза должна быть очень быстрой. | 
| scanning heap | Сканирование кучи — VACUUMв настоящее время сканирует кучу. При этом будет очищена и, если требуется, дефрагментирована каждая страница, а возможно, также будет произведена заморозка. Отслеживать процесс сканирования можно, следя за содержимым столбцаheap_blks_scanned. | 
| vacuuming indexes | Очистка индексов — VACUUMв настоящее время очищает индексы. Если у таблицы есть какие-либо индексы, эта фаза будет наблюдаться минимум единожды в процессе очистки, после того, как куча будет просканирована полностью. Она может повторяться несколько раз в процессе очистки, если объёма maintenance_work_mem оказывается недостаточно для сохранения всех найденных «мёртвых» кортежей. | 
| vacuuming heap | Очистка кучи — VACUUMв настоящее время очищает кучу. Очистка кучи отличается от сканирования, так как она происходит после каждой операции очистки индексов. Еслиheap_blks_scannedменьше чемheap_blks_total, система вернётся к сканированию кучи после завершения этой фазы; в противном случае она начнёт уборку индексов. | 
| cleaning up indexes | Уборка индексов — VACUUMв настоящее время производит уборку в индексах. Это происходит после завершения полного сканирования кучи и очистки индексов и кучи. | 
| truncating heap | Усечение кучи — VACUUMв настоящее время усекает кучу, чтобы возвратить операционной системе объём пустых страниц в конце отношения. Это происходит после уборки индексов. | 
| performing final cleanup | Выполнение окончательной очистки — VACUUMвыполняет окончательную очистку. На этой стадииVACUUMочищает карту свободного пространства, обновляет статистику вpg_classи передаёт статистику сборщику статистики, После этой фазыVACUUMзавершит свою работу. | 

