Отчет о ходе выполнения
Эта страница переведена при помощи нейросети 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 oid | OID базы данных, к которой подключен этот бэкенд |
datname name | Имя базы данных, к которой подключен этот бэкенд |
relid oid | OID таблицы, которая анализируется |
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 oid | OID дочерней таблицы, которая в данный момент сканируется. Это поле действительно только тогда, когда фаза находится в 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 oid | OID базы данных, к которой подключен этот бэкенд. |
datname name | Имя базы данных, к которой подключен этот бэкенд. |
relid oid | OID таблицы, подлежащей кластеризации. |
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 heap | CLUSTER в настоящее время сканирует таблицу с использованием индексного сканирования. |
sorting tuples | CLUSTER в настоящий момент сортирует кортежи. |
writing new heap | CLUSTER сейчас записывает новую кучу. |
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 oid | OID базы данных, к которой подключен этот бэкенд |
datname name | Имя базы данных, к которой подключен этот бэкенд |
relid oid | OID таблицы, для которой создается индекс |
index_relid oid | OID индекса, который создается или повторно индексируется. Во время неконкурентного 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
:
Фаза | Описание |
---|---|
initializing | CREATE INDEX или REINDEX готовится создать индекс. Эта фаза должна быть очень краткой |
waiting for writers before build | CREATE 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 validation | CREATE INDEX CONCURRENTLY или REINDEX CONCURRENTLY ожидает завершения транзакций с блокировками записи, которые потенциально могут записывать данные в таблицу. Эта фаза пропускается при отсутствии режима одновременного доступа. Столбцы lockers_total , lockers_done и current_locker_pid содержат информацию о ходе выполнения этой фазы |
index validation: scanning index | CREATE INDEX CONCURRENTLY сканирует индекс в поисках кортежей, которые необходимо проверить. Эта фаза пропускается при отсутствии режима одновременного доступа. Столбец blocks_total (установленный на общий размер индекса) и blocks_done содержат информацию о ходе выполнения этой фазы |
index validation: sorting tuples | CREATE INDEX CONCURRENTLY сортирует вывод фазы сканирования индекса |
index validation: scanning table | CREATE INDEX CONCURRENTLY сканирует таблицу для проверки кортежей индекса, собранных на двух предыдущих фазах. Эта фаза пропускается при отсутствии режима одновременного доступа. Столбцы blocks_total (установленные на общий размер таблицы) и blocks_done содержат информацию о ходе выполнения этой фазы |
waiting for old snapshots | CREATE INDEX CONCURRENTLY или REINDEX CONCURRENTLY ожидает завершения транзакций, которые потенциально могут видеть таблицу, чтобы освободить свои снимки. Эта фаза пропускается при отсутствии режима одновременного доступа. Столбцы lockers_total , lockers_done и current_locker_pid содержат информацию о ходе выполнения этой фазы |
waiting for readers before marking dead | REINDEX CONCURRENTLY ожидает завершения транзакций с блокировками чтения на таблице перед тем, как пометить старый индекс как мертвый. Эта фаза пропускается при отсутствии режима одновременного доступа. Столбцы lockers_total , lockers_done и current_locker_pid содержат информацию о ходе выполнения этой фазы |
waiting for readers before dropping | REINDEX 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 oid | OID базы данных, к которой подключен этот бэкенд |
datname name | Имя базы данных, к которой подключен этот бэкенд |
relid oid | OID таблицы, которая подвергается вакуумированию |
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
Фаза | Описание |
---|---|
initializing | VACUUM готовится начать сканирование кучи. Эта фаза ожидается очень краткой |
scanning heap | VACUUM в настоящее время сканирует кучу. Он будет обрезать и дефрагментировать каждую страницу при необходимости и, возможно, выполнять замораживающую активность. Столбец heap_blks_scanned может использоваться для мониторинга хода сканирования |
vacuuming indexes | VACUUM в данный момент вакуумирует индексы. Если у таблицы есть какие-либо индексы, это произойдет хотя бы один раз за вакуум после того, как куча будет полностью просканирована. Это может происходить несколько раз во время вакуума, если maintenance_work_mem (или, в случае авто-вакуумирования, autovacuum_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 закончится |
Отчет о ходе выполнения базового резервного копирования
Всякий раз, когда приложение, такое как 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. Резервное копирование будет завершено при завершении данной фазы |