pg_walinspect
モジュールは、実行中のPostgreSQLデータベースクラスタの先行書き込みログの内容を低レベルで検査することを可能にするSQL関数を提供します。
これはデバッグ、分析、報告、教育目的に有用です。
pg_waldumpと似ていますが、独立したユーティリティではなくSQLを通してアクセスできます。
このモジュールのすべての関数は、現在のサーバのタイムラインIDを使ってWAL情報を提供します。
このモジュールのすべての関数は、指定されたin_lsn
またはstart_lsn
以降の最初の有効なWALレコードを見つけようとします。
そのようなレコードがない場合はエラーを出力します。
同様に、end_lsn
が利用可能でなければならず、レコードの途中にある場合は、レコード全体が利用可能でなければなりません。
pg_logical_emit_message
などの一部の関数は、挿入されたばかりのレコードの後のLSNを返します。
したがって、そのLSNをin_lsn
またはstart_lsn
としてこれらの関数の1つに渡すと、nextレコードを返します。
デフォルトでは、これらの関数の使用はスーパーユーザとpg_read_server_files
ロールのメンバに制限されています。
スーパーユーザはGRANT
を使用して他のユーザにアクセスを許可できます。
pg_get_wal_record_info(in_lsn pg_lsn) returns record
指定されたLSNのWALレコード情報を取得します。 指定された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
start_lsn
からend_lsn
までのすべての有効なWALレコードの情報を取得します。
WALレコードごとに1行を返します。
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
この関数は、start_lsn
からWALの終了までの全ての有効なWALレコードの情報を取得する点を除いてpg_get_wal_records_info()
と同じです。
pg_get_wal_stats(start_lsn pg_lsn, end_lsn pg_lsn, per_record boolean DEFAULT false)
returns setof record
start_lsn
からend_lsn
までのすべての有効なWALレコードの統計情報を取得します。
デフォルトでは、resource_manager
タイプごとに1行を返します。
per_record
がtrue
に設定されている場合、record_type
ごとに1行を返します。
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()
と同じですが、start_lsn
からWAL終了までの全ての有効なWALレコードの統計を取得する点が異なります。
Bharath Rupireddy <bharath.rupireddyforpostgres@gmail.com>