F.56. pg_walinspect#

F.56. pg_walinspect

F.56. pg_walinspect

Модуль pg_walinspect предоставляет SQL-функции, которые позволяют вам осмотреть содержимое журнала предварительной записи (write-ahead log) работающего кластера баз данных Tantor SE на низком уровне, что полезно для отладки, аналитических, отчетных или образовательных целей. Он похож на pg_waldump, но доступен через SQL, а не отдельную утилиту.

Все функции этого модуля будут предоставлять информацию WAL с использованием идентификатора текущей временной шкалы сервера.

Все функции этого модуля будут пытаться найти первую допустимую запись WAL, которая находится на или после заданного in_lsn или start_lsn, и выдают ошибку, если такая запись недоступна. Аналогично, end_lsn должен быть доступен, и если он попадает в середину записи, вся запись должна быть доступна.

Примечание

Некоторые функции, такие как pg_logical_emit_message, возвращают LSN после только что вставленной записи. Поэтому, если вы передадите этот LSN как in_lsn или start_lsn в одну из этих функций, она вернет следующую запись.

По умолчанию, использование этих функций ограничено суперпользователями и членами роли pg_read_server_files. Доступ может быть предоставлен другим пользователям суперпользователями с помощью команды GRANT.

F.56.1. Общие функции

pg_get_wal_record_info(in_lsn pg_lsn) returns record

Получает информацию о записи WAL для заданного LSN. Если заданный LSN не является началом записи WAL, то функция возвращает информацию о следующей доступной действительной записи WAL; или ошибку, если такая запись не найдена. Например, использование функции выглядит следующим образом:

postgres=# SELECT * FROM pg_get_wal_record_info('0/1E826E98');
-[ RECORD 1 ]----+----------------------------------------------------
start_lsn        | 0/1E826F20
end_lsn          | 0/1E826F60
prev_lsn         | 0/1E826C80
xid              | 0
resource_manager | Heap2
record_type      | PRUNE
record_length    | 58
main_data_length | 8
fpi_length       | 0
description      | snapshotConflictHorizon 33748 nredirected 0 ndead 2
block_ref        | blkref #0: rel 1663/5/60221 fork main blk 2

pg_get_wal_records_info(start_lsn pg_lsn, end_lsn pg_lsn) returns setof record

Получает информацию о всех допустимых записях WAL между start_lsn и end_lsn. Возвращает одну строку для каждой записи WAL. Если start_lsn или end_lsn еще не доступны, функция вызовет ошибку. Например:

postgres=# SELECT * FROM pg_get_wal_records_info('0/1E913618', '0/1E913740') LIMIT 1;
-[ RECORD 1 ]----+--------------------------------------------------------------
start_lsn        | 0/1E913618
end_lsn          | 0/1E913650
prev_lsn         | 0/1E9135A0
xid              | 0
resource_manager | Standby
record_type      | RUNNING_XACTS
record_length    | 50
main_data_length | 24
fpi_length       | 0
description      | nextXid 33775 latestCompletedXid 33774 oldestRunningXid 33775
block_ref        |

pg_get_wal_records_info_till_end_of_wal(start_lsn pg_lsn) returns setof record

Эта функция аналогична pg_get_wal_records_info(), за исключением того, что она получает информацию о всех действительных записях WAL от start_lsn до конца WAL.

pg_get_wal_stats(start_lsn pg_lsn, end_lsn pg_lsn, per_record boolean DEFAULT false) returns setof record

Получает статистику всех действительных записей WAL между start_lsn и end_lsn. По умолчанию возвращает одну строку для каждого типа resource_manager. Когда per_record установлено в true, возвращает одну строку для каждого record_type. Если start_lsn или end_lsn еще не доступны, функция вызовет ошибку. Например:

postgres=# SELECT * FROM pg_get_wal_stats('0/1E847D00', '0/1E84F500')
           WHERE count > 0 AND
                 "resource_manager/record_type" = 'Transaction'
           LIMIT 1;
-[ RECORD 1 ]----------------+-------------------
resource_manager/record_type | Transaction
count                        | 2
count_percentage             | 8
record_size                  | 875
record_size_percentage       | 41.23468426013195
fpi_size                     | 0
fpi_size_percentage          | 0
combined_size                | 875
combined_size_percentage     | 2.8634072910530795

pg_get_wal_stats_till_end_of_wal(start_lsn pg_lsn, per_record boolean DEFAULT false) returns setof record

Эта функция аналогична pg_get_wal_stats(), за исключением того, что она получает статистику всех действительных записей WAL от start_lsn до конца WAL.

F.56.2. Автор

Bharath Rupireddy