Digital Q.DataBase
может предоставлять отчеты о ходе выполнения определенных команд непосредственно во время их работы. В настоящее время командами, поддерживающими отчетность о ходе выполнения, являются только
ANALYZE
,
CLUSTER
,
CREATE INDEX
,
VACUUM
,
COPY
,
и
BASE_BACKUP
(т. е. команда репликации,
которую
pg_basebackup
использует для создания
базовой резервной копии).
В будущем этот список может быть расширен.
Во время выполнения
ANALYZE
представление
pg_stat_progress_analyze
будет содержать по одной строке для каждого серверного процесса, выполняющего эту команду в данный момент. В таблицах ниже приведено описание передаваемой информации и указания по ее интерпретации.
Таблица 3.12.38. Представление pg_stat_progress_analyze
|
Тип столбца Описание |
|---|
|
Идентификатор процесса серверного процесса. |
|
OID базы данных, к которой подключен данный серверный процесс. |
|
Имя базы данных, к которой подключен данный серверный процесс. |
|
OID анализируемой таблицы. |
|
Текущая фаза обработки. См. Таблица 3.12.39 . |
|
Общее количество блоков кучи (heap blocks), для которых будет выполнена выборка. |
|
Количество просканированных блоков кучи. |
|
Количество объектов расширенной статистики. |
|
Количество вычисленных объектов расширенной статистики. Данный счётчик увеличивается только в том случае,
когда текущей фазой является
|
|
Количество дочерних таблиц. |
|
Количество просканированных дочерних таблиц. Данный счётчик увеличивается только в том случае, когда
текущей фазой является
|
|
OID сканируемой в данный момент дочерней таблицы. Данное поле
информативно только тогда, когда текущей фазой является
|
Таблица 3.12.39. Фазы выполнения команды ANALYZE
| Фаза | Описание |
|---|---|
инициализация
| Команда готовится к началу сканирования кучи (heap). Данная фаза, как ожидается, будет очень кратковременной. |
сбор строк выборки
|
В данный момент команда выполняет сканирование таблицы, указанной в
relid
для получения строк выборки.
|
получение выборочных строк из наследуемых таблиц
|
В данный момент команда выполняет сканирование дочерних таблиц для получения строк выборки.
Столбцы
child_tables_total
,
child_tables_done
, и
current_child_table_relid
содержат
информацию о прогрессе для данной фазы.
|
вычисление статистики
| Команда вычисляет статистику на основе строк выборки, полученных в процессе сканирования таблицы. |
вычисление расширенной статистики
| Команда вычисляет расширенную статистику на основе строк выборки, полученных в процессе сканирования таблицы. |
завершение процесса выполнения команды ANALYZE
|
Команда выполняет обновление
pg_class
. Когда эта
фаза будет завершена,
ANALYZE
завершится.
|
Обратите внимание, что когда
ANALYZE
выполняется для секционированной таблицы,
все её секции также анализируются рекурсивно.
В этом случае,
ANALYZE
отчет о ходе выполнения сначала выводится для родительской таблицы (при этом собирается статистика наследования), а затем последовательно для каждой секции.
Во время выполнения
CLUSTER
или
VACUUM FULL
выполняется,
представление
pg_stat_progress_cluster
будет содержать строку для каждого серверного процесса, выполняющего в данный момент одну из этих команд. В таблицах ниже приведено описание предоставляемой информации и даны рекомендации по её интерпретации.
Таблица 3.12.40. pg_stat_progress_cluster Представление
|
Тип столбца Описание |
|---|
|
Идентификатор процесса серверного процесса. |
|
OID базы данных, к которой подключен данный серверный процесс. |
|
Имя базы данных, к которой подключен данный серверный процесс. |
|
OID таблицы, подвергаемой кластеризации. |
|
Выполняемая команда. Либо
|
|
Текущая фаза обработки. См. Таблица 3.12.41 . |
|
Если таблица сканируется с использованием индекса, это OID используемого индекса; в противном случае значение равно нулю. |
|
Количество просканированных кортежей кучи (heap tuples).
Этот счетчик увеличивается только в том случае, если фаза имеет значение
|
|
Количество записанных кортежей кучи.
Этот счетчик увеличивается только в том случае, если фаза имеет значение
|
|
Общее количество блоков кучи в таблице. Данное значение сообщается
по состоянию на начало
|
|
Количество отсканированных блоков кучи. Этот счетчик увеличивается только в том случае, если
текущей фазой является
|
|
Количество перестроенных индексов. Этот счетчик увеличивается только тогда, когда фаза
соответствует
|
Таблица 3.12.41. Фазы выполнения команд CLUSTER и VACUUM FULL
| Фаза | Описание |
|---|---|
инициализация
| Команда готовится к началу сканирования кучи (heap). Данная фаза, как ожидается, будет кратковременным. |
seq scanning heap
| Команда в настоящее время выполняет последовательное сканирование таблицы (sequential scan). |
index scanning heap
|
CLUSTER
в настоящее время выполняет сканирование таблицы по индексу (index scan).
|
сортировка кортежей
|
CLUSTER
в данный момент выполняет сортировку кортежей.
|
writing new heap
|
CLUSTER
в данный момент выполняет запись в новую кучу (heap).
|
замена файлов отношений
| Команда в данный момент выполняет подстановку вновь созданных файлов. |
rebuilding index
| Команда в данный момент выполняет пересоздание индекса. |
выполнение финальной очистки
|
Команда выполняет финальную очистку. Когда данная фаза будет
завершена,
CLUSTER
или
VACUUM FULL
будет завершена.
|
Во время выполнения
COPY
представление
pg_stat_progress_copy
представление будет содержать по одной строке
для каждого серверного процесса, выполняющего в данный момент команду
COPY
. В таблице ниже описана предоставляемая информация, а также приведены сведения о способах её интерпретации.
Таблица 3.12.42. pg_stat_progress_copy Представление
|
Тип столбца Описание |
|---|
|
Идентификатор процесса серверного процесса. |
|
OID базы данных, к которой подключен данный серверный процесс. |
|
Имя базы данных, к которой подключен данный серверный процесс. |
|
OID таблицы, над которой выполняется
|
|
Выполняемая команда:
|
|
Тип ввода-вывода, из которого считываются или в который записываются данные:
|
|
Количество байтов, уже обработанных
|
|
Размер исходного файла для
|
|
Количество кортежей, уже обработанных операцией
|
|
Количество кортежей, которые не были обработаны, так как были исключены предложением
|
|
Количество кортежей, пропущенных из-за некорректного формата данных.
Значение этого счетчика увеличивается только при указании значения, отличного от
|
Во время выполнения
CREATE INDEX
или
REINDEX
представление
pg_stat_progress_create_index
представление будет содержать
по одной строке для каждого серверного процесса, выполняющего в данный момент создание индексов. В приведенных ниже таблицах описывается структура отчетных данных и способы их интерпретации.
Таблица 3.12.43. pg_stat_progress_create_index Представление
|
Тип столбца Описание |
|---|
|
Идентификатор процесса серверного процесса, создающего индексы. |
|
OID базы данных, к которой подключен данный серверный процесс. |
|
Имя базы данных, к которой подключен данный серверный процесс. |
|
OID таблицы, для которой создается индекс. |
|
OID индекса, который создается или перестраивается. В ходе
неконкурентной
|
|
Конкретный тип команды:
|
|
Текущая фаза процесса создания индекса. См. Таблица 3.12.44 . |
|
Общее количество блокирующих процессов, ожидание которых требуется (если применимо). |
|
Количество блокирующих процессов, ожидание которых уже завершено. |
|
Идентификатор процесса блокировщика, ожидаемого в данный момент. |
|
Общее количество блоков, подлежащих обработке на текущей фазе. |
|
Количество блоков, уже обработанных на текущей фазе. |
|
Общее количество кортежей, подлежащих обработке на текущей фазе. |
|
Количество кортежей, уже обработанных на текущей фазе. |
|
Общее количество секций, для которых должен быть создан индекс,
или к которым он должен быть присоединен, включая как прямые, так и косвенные секции.
|
|
Количество секций, для которых индекс уже был создан
или к которым он должен быть присоединен, включая как прямые, так и косвенные секции.
|
Таблица 3.12.44. Фазы выполнения CREATE INDEX
| Фаза | Описание |
|---|---|
инициализация
|
CREATE INDEX
или
REINDEX
подготовка к созданию индекса. Данная
фаза должна быть кратковременной.
|
ожидание завершения процессов записи перед построением
|
CREATE INDEX CONCURRENTLY
или
REINDEX CONCURRENTLY
ожидает завершения транзакций
с блокировками на запись, которые потенциально могут обращаться к таблице.
Эта фаза пропускается, если не используется режим CONCURRENTLY.
Столбцы
lockers_total
,
lockers_done
и
current_locker_pid
содержат сведения о ходе выполнения
для данной фазы.
|
построение индекса
|
Индекс строится кодом, специфичным для метода доступа. На данной фазе
методы доступа, поддерживающие отчетность о ходе выполнения, заполняют собственные данные,
а подфаза указывается в данном столбце. Как правило,
blocks_total
и
blocks_done
будет содержать данные о ходе выполнения, а также, возможно,
tuples_total
и
tuples_done
.
|
ожидание завершения процессов записи перед проверкой
|
CREATE INDEX CONCURRENTLY
или
REINDEX CONCURRENTLY
ожидает завершения транзакций
с блокировками на запись, которые потенциально могут изменять данные в таблице.
Эта фаза пропускается, если не используется режим CONCURRENTLY.
Столбцы
lockers_total
,
lockers_done
и
current_locker_pid
содержат сведения о ходе выполнения
для данной фазы.
|
проверка индекса: сканирование индекса
|
CREATE INDEX CONCURRENTLY
выполняет сканирование индекса для поиска
кортежей, подлежащих проверке.
Эта фаза пропускается, если не используется режим CONCURRENTLY.
Столбцы
blocks_total
(соответствует общему размеру индекса)
и
blocks_done
содержат сведения о прогрессе выполнения данной фазы.
|
проверка индекса: сортировка кортежей
|
CREATE INDEX CONCURRENTLY
выполняет сортировку результатов
фазы сканирования индекса.
|
проверка индекса: сканирование таблицы
|
CREATE INDEX CONCURRENTLY
выполняет сканирование таблицы
для проверки кортежей индекса, собранных на двух предыдущих фазах.
Эта фаза пропускается, если не используется режим CONCURRENTLY.
Столбцы
blocks_total
(соответствует общему размеру таблицы)
и
blocks_done
содержат сведения о прогрессе выполнения данной фазы.
|
ожидание освобождения старых снимков данных
|
CREATE INDEX CONCURRENTLY
или
REINDEX CONCURRENTLY
ожидает завершения транзакций
которые потенциально могут обращаться к таблице. Данная
фаза пропускается, если не используется параллельный режим (concurrent mode).
Столбцы
lockers_total
,
lockers_done
и
current_locker_pid
содержат сведения о ходе выполнения
для данной фазы.
|
ожидание читающих процессов перед пометкой как недействительного
|
REINDEX CONCURRENTLY
ожидает завершения транзакций
с блокировками на чтение таблицы до их завершения, перед пометкой старого индекса как недействительного (dead).
Эта фаза пропускается, если не используется режим CONCURRENTLY.
Столбцы
lockers_total
,
lockers_done
и
current_locker_pid
содержат сведения о ходе выполнения
для данной фазы.
|
ожидание читающих процессов перед удалением
|
REINDEX CONCURRENTLY
ожидает завершения транзакций
с блокировками на чтение таблицы до их завершения, перед удалением старого индекса.
Эта фаза пропускается, если не используется режим CONCURRENTLY.
Столбцы
lockers_total
,
lockers_done
и
current_locker_pid
содержат сведения о ходе выполнения
для данной фазы.
|
Во время выполнения
VACUUM
представление
pg_stat_progress_vacuum
представление будет содержать по одной строке для каждого обслуживающего процесса (включая рабочие процессы автоочистки (autovacuum worker processes)), который в данный момент выполняет очистку. В нижеследующих таблицах описывается предоставляемая информация и приводятся сведения о её интерпретации. Ход выполнения для
VACUUM FULL
сообщается с помощью
pg_stat_progress_cluster
так как обе команды
VACUUM FULL
и
CLUSTER
перезаписывают таблицу, тогда как обычная операция
VACUUM
изменяет его только на месте. См.
Раздел 3.12.4.2
.
Таблица 3.12.45. pg_stat_progress_vacuum Представление
|
Тип столбца Описание |
|---|
|
Идентификатор процесса серверного процесса. |
|
OID базы данных, к которой подключен данный серверный процесс. |
|
Имя базы данных, к которой подключен данный серверный процесс. |
|
OID очищаемой таблицы. |
|
Текущая фаза выполнения операции очистки. См. Таблица 3.12.46 . |
|
Общее количество блоков кучи в таблице. Данное значение сообщается
на момент начала сканирования; блоки, добавленные позже, не будут (и
не должны быть) затронуты этой операцией
|
|
Количество просканированных блоков кучи (heap blocks). Так как
visibility map
используется для оптимизации сканирования,
некоторые блоки пропускаются без проверки; пропущенные блоки
учитываются в этом итоге, поэтому в конечном счете данное значение станет
равным
|
|
Количество очищенных блоков кучи (heap blocks). Если у таблицы имеются индексы, этот
счетчик увеличивается только в том случае, если текущей фазой является
|
|
Количество завершенных циклов очистки индексов. |
|
Объем данных «мертвых» кортежей, который может быть накоплен до необходимости выполнения цикла очистки индексов, на основании maintenance_work_mem . |
|
Объем данных «мертвых» кортежей, собранных с момента последнего цикла очистки индексов. |
|
Количество идентификаторов «мертвых» элементов, собранных с момента последнего цикла очистки индексов. |
|
Общее количество индексов, которые будут подвергнуты очистке. Это
значение фиксируется в начале
|
|
Количество обработанных индексов. Данный счётчик увеличивается только в том случае, когда
текущей фазой является
|
Таблица 3.12.46. Фазы процесса VACUUM
| Фаза | Описание |
|---|---|
инициализация
|
VACUUM
подготавливается к началу сканирования кучи (heap). Данная
фаза обычно кратковременна.
|
scanning heap
|
VACUUM
в настоящее время сканирует кучу (heap). Процесс выполняет очистку и
дефрагментацию каждой страницы при необходимости, а также, возможно, операции заморозки
объектов. Столбец
heap_blks_scanned
может быть использован
для мониторинга хода сканирования.
|
vacuuming indexes
|
VACUUM
в данный момент выполняет очистку индексов. Если таблица содержит
какие-либо индексы, это будет происходить как минимум один раз за цикл VACUUM после того, как куча
будет полностью просканирована. Это может происходить несколько раз за один цикл очистки
если
maintenance_work_mem
(или, в случае процесса autovacuum,
autovacuum_work_mem
если задано) недостаточно для хранения
количества обнаруженных «мертвых» кортежей.
|
vacuuming heap
|
VACUUM
в настоящий момент выполняет очистку (vacuuming) основной области хранения (heap). Очистка основной области
отличается от сканирования основной области и выполняется после каждого этапа
очистки индексов. Если
heap_blks_scanned
меньше чем
heap_blks_total
, система вернется к сканированию
основной области после завершения данной фазы; в противном случае начнется
очистка индексов после завершения данной фазы.
|
очистка индексов
|
VACUUM
в настоящий момент выполняет очистку индексов. Это происходит после того, как
основная область была полностью просканирована и завершена очистка всех индексов
и основной области.
|
усечение основной области (heap)
|
VACUUM
в настоящий момент выполняет усечение основной области (heap) для возврата
пустых страниц в конце отношения операционной системе. Данная операция
выполняется после очистки индексов.
|
выполнение финальной очистки
|
VACUUM
выполняет финальную очистку. На данном этапе
VACUUM
осуществляется очистка карты свободного пространства (free space map) и обновление статистики
в
pg_class
, и передают статистику в систему кумулятивной
статистики. По завершении этой фазы,
VACUUM
будет завершена.
|
В тех случаях, когда приложение, подобное
pg_basebackup
выполняет базовое резервное копирование, данное
pg_stat_progress_basebackup
представление будет содержать строку для каждого процесса передачи WAL (WAL sender process), который в данный момент
выполняет
BASE_BACKUP
команду репликации
и осуществляет потоковую передачу резервной копии. В приведенных ниже таблицах описывается предоставляемая информация и поясняется порядок ее интерпретации.
Таблица 3.12.47. pg_stat_progress_basebackup Представление
|
Тип столбца Описание |
|---|
|
Идентификатор процесса передачи WAL (WAL sender process). |
|
Текущая фаза обработки. См. Таблица 3.12.48 . |
|
Общий объем данных, подлежащих потоковой передаче. Это значение является оценочным и
фиксируется на момент начала
|
|
Объем переданных данных. Данный счётчик увеличивается только в том случае,
когда текущей фазой является
|
|
Общее количество табличных пространств, которые будут переданы. |
|
Количество переданных табличных пространств. Этот счетчик увеличивается
только тогда, когда фаза находится в состоянии
|
Таблица 3.12.48. Base Backup Phases
| Фаза | Описание |
|---|---|
инициализация
| Процесс передачи WAL (WAL sender) готовится к началу резервного копирования. Ожидается, что эта фаза будет очень кратковременной. |
ожидание завершения контрольной точки (checkpoint)
|
Процесс передачи WAL (WAL sender) в данный момент выполняет
pg_backup_start
подготовка к
выполнению базового резервного копирования и ожидание завершения контрольной точки
начала резервного копирования.
|
оценка размера резервной копии
| В настоящее время процесс передачи журнала WAL (WAL sender process) выполняет оценку общего объема файлов базы данных, которые будут переданы в виде базовой резервной копии. |
потоковой передачи файлов базы данных
| В настоящее время процесс передачи журнала WAL (WAL sender process) выполняет потоковую передачу файлов базы данных в качестве базовой резервной копии. |
ожидание завершения архивации журнала WAL
|
Процесс передачи WAL (WAL sender) в данный момент выполняет
pg_backup_stop
для завершения резервного копирования,
и ожидание успешной архивации всех файлов журнала WAL, необходимых для базовой резервной копии,
для завершения этой операции.
Если любой из параметров
--wal-method=none
или
--wal-method=stream
указан в
pg_basebackup
, резервное копирование завершится
по окончании этой фазы.
|
передача файлов WAL
|
Процесс передачи журнала WAL (WAL sender) в настоящее время передает все сегменты журнала WAL
сгенерированные в ходе резервного копирования. Данная фаза наступает после
ожидание завершения архивации журнала WAL
завершения фазы, если задан параметр
--wal-method=fetch
указан в
pg_basebackup
. Резервное копирование будет завершено
по окончании этой фазы.
|