Перейти к основному содержимому

Отчет о ходе выполнения

примечание

Эта страница переведена при помощи нейросети GigaChat.

PostgreSQL имеет возможность сообщать о ходе выполнения определенных команд во время их выполнения. В настоящее время только команды ANALYZE, CLUSTER, CREATE INDEX, VACUUM, COPY и BASE_BACKUP (т.е. команда репликации, которую pg_basebackup выдает для создания базовой резервной копии) поддерживают отчетность о ходе работы. Это может быть расширено в будущем.

Отчет о ходе выполнения ANALYZE

Каждый раз, когда выполняется ANALYZE, представление pg_stat_progress_analyze будет содержать строку для каждого бэкенда, который в данный момент выполняет эту команду. Таблицы ниже описывают информацию, которая будет представлена, и предоставляют сведения о том, как ее интерпретировать.

Представление pg_stat_progress_analyze:

Тип столбцаОписание
pid integerИдентификатор процесса бэкенда
datid oidOID базы данных, к которой подключен этот бэкенд
datname nameИмя базы данных, к которой подключен этот бэкенд
relid oidOID таблицы, которая анализируется
phase textТекущая фаза обработки ANALYZE
sample_blks_total bigintОбщее количество блоков кучи, которые будут выборочно проверены
sample_blks_scanned bigintКоличество проверенных блоков кучи
ext_stats_total bigintКоличество расширенной статистики
ext_stats_computed bigintКоличество вычисленной расширенной статистики. Этот счетчик увеличивается только тогда, когда фаза равна computing extended statistics
child_tables_total bigintКоличество дочерних таблиц
child_tables_done bigintКоличество отсканированных дочерних таблиц. Этот счетчик увеличивается только тогда, когда фаза равна acquiring inherited sample rows
current_child_table_relid oidOID дочерней таблицы, которая в данный момент сканируется. Это поле действительно только тогда, когда фаза находится в acquiring inherited sample rows

Фазы ANALYZE:

ФазаОписание
initializingКоманда готовится начать сканирование кучи. Эта фаза должна быть очень краткой
acquiring sample rowsВ настоящее время команда сканирует таблицу, указанную в relid, чтобы получить примерные строки
acquiring inherited sample rowsСейчас команда сканирует дочерние таблицы для получения примерных строк. Столбцы child_tables_total, child_tables_done и current_child_table_relid содержат информацию о ходе выполнения этой фазы
computing statisticsКоманда вычисляет статистику из выборочных строк, полученных во время сканирования таблицы
computing extended statisticsКоманда вычисляет расширенную статистику из выборочных строк, полученных во время сканирования таблицы
finalizing analyzeКоманда обновляет pg_class. Когда эта фаза будет завершена, ANALYZE закончится
Примечание

Обратите внимание, что при запуске ANALYZE на разделенной таблице анализируются также все ее разделы. В этом случае сначала сообщается о прогрессе ANALYZE для родительской таблицы, где собираются статистические данные по наследованию, а затем для каждого раздела.

Отчет о прогрессе CLUSTER

Когда выполняется команда CLUSTER или VACUUM FULL, представление pg_stat_progress_cluster будет содержать строку для каждого бэкенда, который в настоящее время выполняет одну из этих команд. Таблицы ниже описывают информацию, которая будет сообщаться, и предоставляют сведения о том, как интерпретировать эту информацию.

Таблица Представление pg_stat_progress_cluster

Тип колонкиОписание
pid integerИдентификатор процесса бэкенда.
datid oidOID базы данных, к которой подключен этот бэкенд.
datname nameИмя базы данных, к которой подключен этот бэкенд.
relid oidOID таблицы, подлежащей кластеризации.
command textВыполняемая команда. Либо CLUSTER, либо VACUUM FULL.
phase textТекущая обрабатываемая фаза.
cluster_index_relid oidЕсли таблица сканируется с использованием индекса, это OID используемого индекса; иначе — ноль.
heap_tuples_scanned bigintКоличество кортежей кучи, прошедших сканирование. Этот счетчик увеличивается только тогда, когда фаза равна seq scanning heap, index scanning heap или writing new heap.
heap_tuples_written bigintКоличество записанных кортежей кучи. Этот счетчик увеличивается только тогда, когда фаза равна seq scanning heap, index scanning heap или writing new heap.
heap_blks_total bigintОбщее количество блоков кучи в таблице. Это число указывается на начало seq scanning heap.
heap_blks_scanned bigintКоличество отсканированных блоков кучи. Этот счетчик увеличивается только тогда, когда фаза равна seq scanning heap.
index_rebuild_count bigintКоличество перестроенных индексов. Этот счетчик увеличивается только тогда, когда фаза равна rebuilding index.

** Фазы CLUSTER и VACUUM FULL**

ФазаОписание
initializingКоманда готовится начать сканирование кучи. Этот этап ожидается очень коротким.
seq scanning heapВ данный момент команда выполняет последовательное сканирование таблицы.
index scanning heapCLUSTER в настоящее время сканирует таблицу с использованием индексного сканирования.
sorting tuplesCLUSTER в настоящий момент сортирует кортежи.
writing new heapCLUSTER сейчас записывает новую кучу.
swapping relation filesКоманда в данный момент заменяет только что созданные файлы на свои места.
rebuilding indexКоманда в текущий момент перестраивает индекс.
performing final cleanupКоманда производит окончательную очистку. Когда этот этап будет завершен, завершится CLUSTER или VACUUM FULL.

Отчет о ходе выполнения CREATE INDEX

Когда CREATE INDEX или REINDEX выполняется, представление pg_stat_progress_create_index будет содержать одну строку для каждого бэкенда, который в данный момент создает индексы. В приведенных ниже таблицах описывается информация, которая будет представлена, и приводятся сведения о том, как ее интерпретировать.

Представление pg_stat_progress_create_index:

Тип столбцаОписание
pid integerИдентификатор процесса бэкенда
datid oidOID базы данных, к которой подключен этот бэкенд
datname nameИмя базы данных, к которой подключен этот бэкенд
relid oidOID таблицы, для которой создается индекс
index_relid oidOID индекса, который создается или повторно индексируется. Во время неконкурентного CREATE INDEX это равно 0
command textКоманда, которая выполняется: CREATE INDEX, CREATE INDEX CONCURRENTLY, REINDEX, или REINDEX CONCURRENTLY
phase textТекущая фаза обработки при создании CREATE INDEX
lockers_total bigintОбщее количество замков, которые нужно ждать, если применимо
lockers_done bigintКоличество замков, за которыми уже следили
current_locker_pid bigintИдентификатор процесса блокировки, который в данный момент ожидает обработки
blocks_total bigintОбщее количество блоков, которые должны быть обработаны в текущей фазе
blocks_done bigintКоличество блоков, уже обработанных в текущей фазе
tuples_total bigintОбщее количество кортежей, которые должны быть обработаны в текущей фазе
tuples_done bigintКоличество кортежей, уже обработанных на текущем этапе
partitions_total bigintПри создании индекса для разделенной таблицы этот столбец устанавливается на общее количество разделов, на которых должен быть создан индекс. Это поле является 0 во время REINDEX
partitions_done bigintПри создании индекса на разделенной таблице этот столбец устанавливается на количество разделов, для которых был создан индекс. Это поле установлено во время 0

Фазы CREATE INDEX:

ФазаОписание
initializingCREATE INDEX или REINDEX готовится создать индекс. Эта фаза должна быть очень краткой
waiting for writers before buildCREATE INDEX CONCURRENTLY или REINDEX CONCURRENTLY ожидает завершения транзакций с блокировками записи, которые потенциально могут видеть таблицу. Эта фаза пропускается при отсутствии режима одновременного доступа. Столбцы lockers_total, lockers_done и current_locker_pid содержат информацию о ходе выполнения этой фазы
building indexИндекс создается методом доступа, специфичным для метода. На этом этапе методы доступа, поддерживающие отчетность о ходе работы, заполняют свои собственные данные о ходе работы, а подэтап указывается в этом столбце. Обычно blocks_total и blocks_done будут содержать данные о ходе работы, а также потенциально tuples_total и tuples_done
waiting for writers before validationCREATE INDEX CONCURRENTLY или REINDEX CONCURRENTLY ожидает завершения транзакций с блокировками записи, которые потенциально могут записывать данные в таблицу. Эта фаза пропускается при отсутствии режима одновременного доступа. Столбцы lockers_total, lockers_done и current_locker_pid содержат информацию о ходе выполнения этой фазы
index validation: scanning indexCREATE INDEX CONCURRENTLY сканирует индекс в поисках кортежей, которые необходимо проверить. Эта фаза пропускается при отсутствии режима одновременного доступа. Столбец blocks_total (установленный на общий размер индекса) и blocks_done содержат информацию о ходе выполнения этой фазы
index validation: sorting tuplesCREATE INDEX CONCURRENTLY сортирует вывод фазы сканирования индекса
index validation: scanning tableCREATE INDEX CONCURRENTLY сканирует таблицу для проверки кортежей индекса, собранных на двух предыдущих фазах. Эта фаза пропускается при отсутствии режима одновременного доступа. Столбцы blocks_total (установленные на общий размер таблицы) и blocks_done содержат информацию о ходе выполнения этой фазы
waiting for old snapshotsCREATE INDEX CONCURRENTLY или REINDEX CONCURRENTLY ожидает завершения транзакций, которые потенциально могут видеть таблицу, чтобы освободить свои снимки. Эта фаза пропускается при отсутствии режима одновременного доступа. Столбцы lockers_total, lockers_done и current_locker_pid содержат информацию о ходе выполнения этой фазы
waiting for readers before marking deadREINDEX CONCURRENTLY ожидает завершения транзакций с блокировками чтения на таблице перед тем, как пометить старый индекс как мертвый. Эта фаза пропускается при отсутствии режима одновременного доступа. Столбцы lockers_total, lockers_done и current_locker_pid содержат информацию о ходе выполнения этой фазы
waiting for readers before droppingREINDEX CONCURRENTLY ожидает завершения транзакций с блокировками чтения из таблицы перед удалением старого индекса. Эта фаза пропускается при отсутствии режима одновременного доступа. Столбцы lockers_total, lockers_done и current_locker_pid содержат информацию о ходе выполнения этой фазы

Отчет о ходе выполнения VACUUM

Всякий раз, когда VACUUM выполняется, представление pg_stat_progress_vacuum будет содержать одну строку для каждого бэкенда (включая рабочие процессы автоочистки), который в данный момент выполняет очистку. В приведенных ниже таблицах описывается информация, которая будет сообщаться, и приводятся сведения о том, как ее интерпретировать. Ход выполнения команд VACUUM FULL сообщается через pg_stat_progress_cluster, потому что оба VACUUM FULL и CLUSTER переписывают таблицу, тогда как обычная команда VACUUM только изменяет ее на месте.

Представление pg_stat_progress_vacuum:

Тип столбцаОписание
pid integerИдентификатор процесса бэкенда
datid oidOID базы данных, к которой подключен этот бэкенд
datname nameИмя базы данных, к которой подключен этот бэкенд
relid oidOID таблицы, которая подвергается вакуумированию
phase textТекущая фаза обработки VACUUM
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
dead_tuple_bytes bigintОбъем данных «мертвых» кортежей, собранных со времени последнего цикла очистки индекса
num_dead_item_ids bigintКоличество идентификаторов мертвых кортежей, собранных с момента последнего цикла вакуумирования индекса
indexes_total bigintОбщее число индексов, которые будут очищены или убраны. Это число сообщается в начале фазы vacuuming indexes или cleaning up indexes
indexes_processed bigintЧисло обработанных индексов. Этот счетчик увеличивается только во время фазы vacuuming indexes или cleaning up indexes

Фазы VACUUM

ФазаОписание
initializingVACUUM готовится начать сканирование кучи. Эта фаза ожидается очень краткой
scanning heapVACUUM в настоящее время сканирует кучу. Он будет обрезать и дефрагментировать каждую страницу при необходимости и, возможно, выполнять замораживающую активность. Столбец heap_blks_scanned может использоваться для мониторинга хода сканирования
vacuuming indexesVACUUM в данный момент вакуумирует индексы. Если у таблицы есть какие-либо индексы, это произойдет хотя бы один раз за вакуум после того, как куча будет полностью просканирована. Это может происходить несколько раз во время вакуума, если maintenance_work_mem (или, в случае авто-вакуумирования, autovacuum_work_mem, если установлено) недостаточно для хранения количества мертвых кортежей, которые были найдены
vacuuming heapVACUUM в настоящее время очищает кучу. Очистка кучи отличается от сканирования кучи и происходит после каждого случая очистки индексов. Если heap_blks_scanned меньше heap_blks_total, система вернется к сканированию кучи после завершения этой фазы; в противном случае она начнет очищать индексы после завершения этой фазы
cleaning up indexesVACUUM в данный момент занимается очисткой индексов. Это происходит после того, как куча была полностью просканирована и завершена вся очистка индексов и кучи
truncating heapVACUUM в настоящий момент усекает кучу таким образом, чтобы возвращать пустые страницы в конце отношения операционной системе. Это происходит после очистки индексов
performing final cleanupVACUUM выполняет окончательную очистку. В течение этого этапа VACUUM будет очищать карту свободного пространства, обновлять статистику в pg_class и сообщать статистику в систему кумулятивной статистики. Когда эта фаза завершится, VACUUM закончится

Отчет о ходе выполнения базового резервного копирования

Всякий раз, когда приложение, такое как pg_basebackup, создает базовое резервное копирование, представление pg_stat_progress_basebackup будет содержать строку для каждого процесса отправителя WAL, который в данный момент выполняет команду репликации BASE_BACKUP и передает потоковое резервное копирование. В приведенных ниже таблицах описывается информация, которая будет сообщаться, а также приводятся сведения о том, как ее интерпретировать.

Представление pg_stat_progress_basebackup:

Тип столбцаОписание
pid integerИдентификатор процесса отправителя WAL
phase textТекущая фаза обработки
backup_total bigintОбщее количество данных, которые будут переданы потоком. Это оценивается и сообщается в начале фазы streaming database files. Обратите внимание, что это всего лишь приблизительное значение, поскольку база данных может измениться во время фазы streaming database files и журнал WAL может быть включен в резервную копию позже. Это всегда то же самое значение, что и backup_streamed после того, как объем переданных данных превышает оцениваемый общий размер. Если оценка отключена в pg_basebackup (т.е., указан параметр --no-estimate-size), это NULL
backup_streamed bigintКоличество переданных данных. Этот счетчик увеличивается только тогда, когда фаза равна streaming database files или transferring wal files
tablespaces_total bigintОбщее количество табличных пространств, которые будут передаваться потоком
tablespaces_streamed bigintКоличество табличных пространств, переданных потоком. Этот счетчик увеличивается только тогда, когда фаза находится в streaming database files

Фазы базового резервного копирования

ФазаОписание
initializingПроцесс отправителя WAL готовится начать резервное копирование. Эта фаза должна быть очень краткой
waiting for checkpoint to finishВ данный момент процесс отправителя WAL выполняет pg_backup_start для подготовки к созданию базовой резервной копии и ожидает завершения контрольной точки начала резервного копирования
estimating backup sizeПроцесс отправителя WAL в настоящее время оценивает общее количество файлов базы данных, которые будут переданы в виде базовой резервной копии
streaming database filesПроцесс отправителя WAL в настоящее время передает файлы базы данных в качестве базовой резервной копии
waiting for wal archiving to finishПроцесс отправителя WAL в данный момент выполняет pg_backup_stop для завершения резервного копирования и ожидает успешного архивирования всех файлов WAL, необходимых для базовой резервной копии. Если указано либо --wal-method=none, либо --wal-method=stream в pg_basebackup, резервное копирование завершится после завершения этой фазы
transferring wal filesПроцесс отправителя WAL в настоящий момент передает все журналы WAL, созданные во время резервного копирования. Эта фаза происходит после фазы waiting for wal archiving to finish, если указан --wal-method=fetch в pg_basebackup. Резервное копирование будет завершено при завершении данной фазы