Отчет о ходе выполнения
Эта страница переведена при помощи нейросети 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. Резервное копирование будет завершено при завершении данной фазы |