26.4. Отчет о прогрессе#

26.4. Отчет о прогрессе

26.4. Отчет о прогрессе #

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

26.4.1. Отчетность о прогрессе ANALYZE #

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

Таблица 26.37. pg_stat_progress_analyze View

Тип столбца

Описание

pid integer

Идентификатор процесса бэкенда.

datid oid

OID базы данных, к которой подключен этот бэкенд.

datname name

Имя базы данных, к которой подключен этот бэкенд.

relid oid

OID анализируемой таблицы.

phase text

Текущая фаза обработки. См. Таблица 26.38.

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.


Таблица 26.38. АНАЛИЗ Фазы

ФазаОписание
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 предоставляется для родительской таблицы, где собираются статистические данные о наследовании, а затем для каждой секции.

26.4.2. Отчеты о прогрессе CLUSTER #

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

Таблица 26.39. pg_stat_progress_cluster View

Тип столбца

Описание

pid integer

Идентификатор процесса бэкенда.

datid oid

OID базы данных, к которой подключен этот бэкенд.

datname name

Имя базы данных, к которой подключен этот бэкенд.

relid oid

OID таблицы, которая будет кластеризована.

command text

Команда, которая выполняется. Либо CLUSTER, либо VACUUM FULL.

phase text

Текущая фаза обработки. См. Таблица 26.40.

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.


Таблица 26.40. Фазы 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 завершится.

26.4.3. КОПИРОВАТЬ Отчет о прогрессе #

Всякий раз, когда выполняется команда COPY, представление pg_stat_progress_copy будет содержать одну строку для каждого бэкенда, который в данный момент выполняет команду COPY. В таблице ниже описана информация, которая будет отображаться, и предоставляется информация о том, как ее интерпретировать.

Таблица 26.41. pg_stat_progress_copy View

Тип столбца

Описание

pid integer

Идентификатор процесса бэкенда.

datid oid

OID базы данных, к которой подключен этот бэкенд.

datname name

Имя базы данных, к которой подключен этот бэкенд.

relid oid

OID таблицы, на которой выполняется команда COPY. Если копирование выполняется из запроса SELECT, то значение устанавливается в 0.

command text

Команда, которая выполняется: COPY FROM или COPY TO.

type text

Тип io, из которого данные считываются или записываются: FILE, PROGRAM, PIPE (для COPY FROM STDIN и COPY TO STDOUT), или CALLBACK (используется, например, во время начальной синхронизации таблицы в логической репликации).

bytes_processed bigint

Количество байт, уже обработанных командой COPY.

bytes_total bigint

Размер исходного файла для команды COPY FROM в байтах. Если значение недоступно, установлено значение 0.

tuples_processed bigint

Количество кортежей, уже обработанных командой COPY.

tuples_excluded bigint

Количество кортежей, не обработанных из-за их исключения в предложении WHERE команды COPY.


26.4.4. Создание индекса Отчет о прогрессе #

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

Таблица 26.42. pg_stat_progress_create_index View

Тип столбца

Описание

pid integer

Идентификатор процесса бэкенда, создающего индексы.

datid oid

OID базы данных, к которой подключен этот бэкенд.

datname name

Имя базы данных, к которой подключен этот бэкенд.

relid oid

OID таблицы, на которой создается индекс.

index_relid oid

OID индекса, который создается или переиндексируется. Во время непараллельной команды CREATE INDEX это значение равно 0.

command text

Specific command type: CREATE INDEX, CREATE INDEX CONCURRENTLY, REINDEX, или REINDEX CONCURRENTLY.

phase text

Текущая фаза обработки создания индекса. См. Таблица 26.43.

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 во время REINDEX, или когда индекс не секционирован.


Таблица 26.43. Создание индекса Phases

ФазаОписание
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 содержат информацию о ходе этого этапа.

26.4.5. Отчет о прогрессе VACUUM #

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

Таблица 26.44. pg_stat_progress_vacuum View

Тип столбца

Описание

pid integer

Идентификатор процесса бэкенда.

datid oid

OID базы данных, к которой подключен этот бэкенд.

datname name

Имя базы данных, к которой подключен этот бэкенд.

relid oid

OID таблицы, которая подвергается очистке.

phase text

Текущая фаза обработки очистки. См. Таблица 26.45.

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

Количество удаленных кортежей, собранных с момента последнего цикла очистки индекса.


Таблица 26.45. Фазы 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 завершится.

26.4.6. Отчет о прогрессе создания базовой резервной копии #

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

Таблица 26.46. pg_stat_progress_basebackup View

Тип столбца

Описание

pid integer

Идентификатор процесса отправителя WAL.

phase text

Текущая фаза обработки. См. Таблица 26.47.

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.


Таблица 26.47. Фазы создания базовой резервной копии

ФазаОписание
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-файлы были успешно заархивированы. Если в pg_basebackup указано либо --wal-method=none, либо --wal-method=stream, резервная копия завершится после завершения этой фазы.
transferring wal files Процесс отправки WAL в данный момент передает все журналы WAL, сгенерированные во время резервного копирования. Эта фаза происходит после фазы waiting for wal archiving to finish, если --wal-method=fetch указано в pg_basebackup. Резервное копирование завершится после завершения этой фазы.