27.4. Отчет о прогрессе#
27.4. Отчет о прогрессе
Tantor SE имеет возможность отображать прогресс выполнения определенных команд во время их выполнения. В настоящее время, только следующие команды поддерживают отчет о прогрессе: ANALYZE, CLUSTER, CREATE INDEX, VACUUM, COPY и BASE_BACKUP (то есть команда репликации, которую выполняет pg_basebackup для создания базовой резервной копии).
В будущем это может быть расширено.
27.4.1. Отчетность о прогрессе ANALYZE
Всякий раз, когда выполняется команда ANALYZE, представление pg_stat_progress_analyze будет содержать строку для каждого бэкенда, который в данный момент выполняет эту команду. Таблицы ниже описывают информацию, которая будет отображаться, и предоставляют информацию о том, как ее интерпретировать.
Таблица 27.36. pg_stat_progress_analyze View
Тип столбца Описание |
|---|
Идентификатор процесса бэкенда. |
OID базы данных, к которой подключен этот бэкенд. |
Имя базы данных, к которой подключен этот бэкенд. |
OID анализируемой таблицы. |
Текущая фаза обработки. См. Таблица 27.37. |
Общее количество блоков кучи, которые будут выбраны для выборки. |
Количество просканированных блоков кучи. |
Количество расширенной статистики. |
Количество вычисленных расширенных статистических данных. Этот счетчик увеличивается только тогда, когда фаза |
Количество дочерних таблиц. |
Количество просканированных дочерних таблиц. Этот счетчик увеличивается только в фазе |
OID дочерней таблицы, которая в данный момент сканируется. Это поле
действительно только в фазе
|
Таблица 27.37. АНАЛИЗ Фазы
| Фаза | Описание |
|---|---|
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 предоставляется для родительской таблицы, где собираются статистические данные о наследовании, а затем для каждой секции.
27.4.2. Создание индекса Отчет о прогрессе
Всякий раз, когда выполняется команда CREATE INDEX или REINDEX, представление pg_stat_progress_create_index будет содержать одну строку для каждого бэкенда, который в данный момент создает индексы. Таблицы ниже описывают информацию, которая будет отражена, и предоставляют информацию о том, как ее интерпретировать.
Таблица 27.38. pg_stat_progress_create_index View
Тип столбца Описание |
|---|
Идентификатор процесса бэкенда. |
OID базы данных, к которой подключен этот бэкенд. |
Имя базы данных, к которой подключен этот бэкенд. |
OID таблицы, на которой создается индекс. |
OID индекса, который создается или переиндексируется. Во время непараллельной команды |
Команда, которая выполняется: |
Текущая фаза обработки создания индекса. См. Таблица 27.39. |
Общее количество ячеек для ожидания, при необходимости. |
Количество уже ожидавших шкафчиков. |
Идентификатор процесса, ожидающего текущего замка. |
Общее количество блоков, которые будут обработаны в текущей фазе. |
Количество уже обработанных блоков в текущей фазе. |
Общее количество кортежей, которые должны быть обработаны в текущей фазе. |
Количество уже обработанных кортежей в текущей фазе. |
При создании индекса на секционированной таблице, это поле устанавливается равной общему количеству секций, на которых будет создан индекс. Во время выполнения операции |
При создании индекса на секционированной таблице, это поле устанавливается на количество секций, на которых был создан индекс.
Это поле равно |
Таблица 27.39. Создание индекса 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 содержат информацию о ходе этого этапа.
|
27.4.3. Отчет о прогрессе VACUUM
Всякий раз, когда выполняется команда VACUUM, представление pg_stat_progress_vacuum будет содержать одну строку для каждого бэкенда (включая рабочие процессы автоматической очистки), который в настоящее время выполняет очистку. Таблицы ниже описывают информацию, которая будет отражена, и предоставляют информацию о том, как ее интерпретировать. Прогресс для команд VACUUM FULL отображается через pg_stat_progress_cluster, поскольку и VACUUM FULL, и CLUSTER перезаписывают таблицу, в то время как обычный VACUUM только модифицирует ее на месте. См. Раздел 27.4.4.
Таблица 27.40. pg_stat_progress_vacuum View
Тип столбца Описание |
|---|
Идентификатор процесса бэкенда. |
OID базы данных, к которой подключен этот бэкенд. |
Имя базы данных, к которой подключен этот бэкенд. |
OID таблицы, которая подвергается очистке. |
Текущая фаза обработки очистки. См. Таблица 27.41. |
Общее количество блоков heap в таблице. Это число отражает состояние на момент начала сканирования; блоки, добавленные позже, не будут (и не должны быть) посещены этой |
Количество просканированных блоков кучи. Поскольку карта видимости используется для оптимизации сканирования, некоторые блоки будут прне указаны без проверки; прне указанные блоки включены в эту общую сумму, так что это число в конечном итоге станет равным |
Количество блоков heap, просмотренных процессом vacuum. Если у таблицы нет индексов, этот счетчик увеличивается только во время фазы |
Количество завершенных циклов очистки индекса. |
Количество мертвых кортежей, которые можно сохранить, прежде чем потребуется выполнить цикл очистки индекса, основывается на значении параметра maintenance_work_mem. |
Количество удаленных кортежей, собранных с момента последнего цикла очистки индекса. |
Таблица 27.41. Фазы 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 завершится.
|
27.4.4. Отчеты о прогрессе CLUSTER
Когда выполняются команды CLUSTER или VACUUM FULL, представление pg_stat_progress_cluster будет содержать строку для каждого бэкенда, который в данный момент выполняет одну из этих команд. В таблицах ниже описана информация, которая будет отображаться, и предоставлена информация о том, как ее интерпретировать.
Таблица 27.42. pg_stat_progress_cluster View
Тип столбца Описание |
|---|
Идентификатор процесса бэкенда. |
OID базы данных, к которой подключен этот бэкенд. |
Имя базы данных, к которой подключен этот бэкенд. |
OID таблицы, которая будет кластеризована. |
Команда, которая выполняется. Либо |
Текущая фаза обработки. См. Таблица 27.43. |
Если таблица сканируется с использованием индекса, это OID используемого индекса; в противном случае, это ноль. |
Количество просканированных кортежей кучи.
Этот счетчик увеличивается только при выполнении фазы
|
Количество записанных кортежей кучи.
Этот счетчик увеличивается только в фазе
|
Общее количество блоков heap в таблице. Это число сообщается
на начало |
Количество просканированных блоков кучи. Этот счетчик увеличивается в фазе |
Количество перестроенных индексов. Этот счетчик увеличивается только тогда, когда фаза
равна |
Таблица 27.43. Фазы 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 завершится.
|
27.4.5. Отчет о прогрессе создания базовой резервной копии
Когда приложение, например pg_basebackup,
делает базовую резервную копию, представление
pg_stat_progress_basebackup
будет содержать строку для каждого процесса отправки WAL, который в настоящее время
выполняет команду репликации BASE_BACKUP
и передает резервную копию. В таблицах ниже описана информация,
которая будет отражаться, и предоставлена информация о том, как ее интерпретировать.
Таблица 27.44. pg_stat_progress_basebackup View
Тип столбца Описание |
|---|
Идентификатор процесса отправителя WAL. |
Текущая фаза обработки. См. Таблица 27.45. |
Общий объем данных, которые будут передаваться потоком. Это приблизительная оценка, которая сообщается в начале фазы |
Количество переданных данных. Этот счетчик увеличивается только в фазе |
Общее количество таблиц, которые будут передаваться потоком. |
Количество передаваемых таблиц пространств. Этот счетчик увеличивается только
когда фаза равна |
Таблица 27.45. Фазы создания базовой резервной копии
| Фаза | Описание |
|---|---|
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. Резервное копирование завершится
после завершения этой фазы.
|
27.4.6. КОПИРОВАТЬ Отчет о прогрессе
Всякий раз, когда выполняется команда COPY, представление pg_stat_progress_copy будет содержать одну строку для каждого бэкенда, который в данный момент выполняет команду COPY. В таблице ниже описана информация, которая будет отображаться, и предоставляется информация о том, как ее интерпретировать.
Таблица 27.46. pg_stat_progress_copy View
Тип столбца Описание |
|---|
Идентификатор процесса бэкенда. |
OID базы данных, к которой подключен этот бэкенд. |
Имя базы данных, к которой подключен этот бэкенд. |
OID таблицы, на которой выполняется команда |
Команда, которая выполняется: |
Тип io, из которого данные считываются или записываются:
|
Количество байт, уже обработанных командой |
Размер исходного файла для команды |
Количество кортежей, уже обработанных командой |
Количество кортежей, не обработанных из-за их исключения в предложении |