F.37. pg_walinspect

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を使用して他のユーザにアクセスを許可できます。

F.37.1. 一般的な関数

pg_get_wal_record_info(in_lsn pg_lsn, start_lsn OUT pg_lsn, end_lsn OUT pg_lsn, prev_lsn OUT pg_lsn, xid OUT xid, resource_manager OUT text, record_type OUT text, record_length OUT int4, main_data_length OUT int4, fpi_length OUT int4, description OUT text, block_ref OUT text)

指定されたLSNのWALレコード情報を取得します。 指定されたLSNがWALレコードの先頭にない場合、次に利用可能な有効なWALレコードの情報を提供します。 そのようなレコードが見つからない場合はエラーになります。

pg_get_wal_records_info(start_lsn pg_lsn, end_lsn pg_lsn, start_lsn OUT pg_lsn, end_lsn OUT pg_lsn, prev_lsn OUT pg_lsn, xid OUT xid, resource_manager OUT text, record_type OUT text, record_length OUT int4, main_data_length OUT int4, fpi_length OUT int4, description OUT text, block_ref OUT text) returns setof record

start_lsnからend_lsnまでのすべての有効なWALレコードの情報を取得します。 WALレコードごとに1行を返します。 start_lsnまたはend_lsnがまだ使用できない場合、この関数はエラーを発生させます。 たとえば、この関数の使用法は次のとおりです。

postgres=# select start_lsn, end_lsn, prev_lsn, xid, resource_manager, record_type, record_length, main_data_length, fpi_length, description from pg_get_wal_records_info('0/14F9A30', '0/15011D7');
 start_lsn |  end_lsn  | prev_lsn  | xid | resource_manager | record_type  | record_length | main_data_length | fpi_length |     description
-----------+-----------+-----------+-----+------------------+--------------+---------------+------------------+------------+---------------------
 0/14FA118 | 0/14FB4B0 | 0/14F9958 | 725 | Btree            | INSERT_LEAF  |          5013 |                2 |       4960 | off 246
 0/14FB4B0 | 0/14FD050 | 0/14FA118 | 725 | Btree            | INSERT_LEAF  |          7045 |                2 |       6992 | off 130
 0/14FD050 | 0/14FD0A8 | 0/14FB4B0 | 725 | Heap2            | MULTI_INSERT |            85 |                6 |          0 | 1 tuples flags 0x02
 0/14FD0A8 | 0/14FD0F0 | 0/14FD050 | 725 | Btree            | INSERT_LEAF  |            72 |                2 |          0 | off 155
 0/14FD0F0 | 0/14FD138 | 0/14FD0A8 | 725 | Btree            | INSERT_LEAF  |            72 |                2 |          0 | off 134
 0/14FD138 | 0/14FD210 | 0/14FD0F0 | 725 | Heap             | INSERT       |           211 |                3 |          0 | off 11 flags 0x00
 0/14FD210 | 0/14FD250 | 0/14FD138 | 725 | Btree            | INSERT_LEAF  |            64 |                2 |          0 | off 246
 0/14FD250 | 0/14FF260 | 0/14FD210 | 725 | Btree            | INSERT_LEAF  |          8181 |                2 |       8128 | off 47
 0/14FF260 | 0/14FF2B8 | 0/14FD250 | 725 | Heap2            | MULTI_INSERT |            85 |                6 |          0 | 1 tuples flags 0x02
 0/14FF2B8 | 0/14FF300 | 0/14FF260 | 725 | Btree            | INSERT_LEAF  |            72 |                2 |          0 | off 155
 0/14FF300 | 0/15008D8 | 0/14FF2B8 | 725 | Btree            | INSERT_LEAF  |          5565 |                2 |       5512 | off 106
 0/15008D8 | 0/1500C48 | 0/14FF300 | 725 | Heap             | INSERT       |           874 |                3 |        820 | off 2 flags 0x01
(12 rows)

pg_get_wal_records_info_till_end_of_wal(start_lsn pg_lsn, start_lsn OUT pg_lsn, end_lsn OUT pg_lsn, prev_lsn OUT pg_lsn, xid OUT xid, resource_manager OUT text, record_type OUT text, record_length OUT int4, main_data_length OUT int4, fpi_length OUT int4, description OUT text, block_ref OUT text) 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, "resource_manager/record_type" OUT text, count OUT int8, count_percentage OUT float8, record_length OUT int8, record_length_percentage OUT float8, fpi_length OUT int8, fpi_length_percentage OUT float8, combined_size OUT int8, combined_size_percentage OUT float8) returns setof record

start_lsnからend_lsnまでのすべての有効なWALレコードの統計情報を取得します。 デフォルトでは、resource_managerタイプごとに1行を返します。 per_recordtrueに設定されている場合、record_typeごとに1行を返します。 start_lsnまたはend_lsnがまだ使用できない場合、この関数はエラーを発生させます。 たとえば、この関数の使用方法は以下のとおりです。

postgres=# select * from pg_get_wal_stats('0/12FBA30', '0/15011D7') where count > 0;
 resource_manager/record_type | count | count_percentage | record_size | record_size_percentage | fpi_size | fpi_size_percentage | combined_size | combined_size_percentage
------------------------------+-------+------------------+-------------+------------------------+----------+---------------------+---------------+--------------------------
 XLOG                         |    10 |       0.10871929 |         796 |            0.052369177 |      352 |         0.061031006 |          1148 |              0.054751817
 Transaction                  |   187 |        2.0330508 |       62773 |              4.1298623 |        0 |                   0 |         62773 |                2.9938467
 Storage                      |    13 |       0.14133507 |         546 |            0.035921574 |        0 |                   0 |           546 |                0.0260405
 Database                     |     2 |      0.021743858 |          84 |            0.005526396 |        0 |                   0 |            84 |             0.0040062307
 Standby                      |   218 |        2.3700805 |       15908 |              1.0465941 |        0 |                   0 |         15908 |               0.75870377
 Heap2                        |  1897 |        20.624048 |      383916 |              25.257998 |   364472 |           63.193447 |        748388 |                35.693035
 Heap                         |  1318 |        14.329202 |      621390 |               40.88151 |   139660 |           24.214746 |        761050 |                 36.29693
 Btree                        |  5553 |         60.37182 |      434565 |              28.590216 |    72272 |           12.530776 |        506837 |                 24.17269
(8 rows)

per_recordtrueとして渡された場合:

postgres=# select * from pg_get_wal_stats('0/14AFC30', '0/15011D7', true) where count > 0;
 resource_manager/record_type | count | count_percentage | record_size | record_size_percentage | fpi_size | fpi_size_percentage | combined_size | combined_size_percentage
------------------------------+-------+------------------+-------------+------------------------+----------+---------------------+---------------+--------------------------
 XLOG/CHECKPOINT_SHUTDOWN     |     1 |       0.32894737 |         114 |             0.22891566 |        0 |                   0 |           114 |               0.03534489
 XLOG/CHECKPOINT_ONLINE       |     4 |        1.3157895 |         456 |             0.91566265 |        0 |                   0 |           456 |               0.14137957
 XLOG/NEXTOID                 |     1 |       0.32894737 |          30 |            0.060240965 |        0 |                   0 |            30 |              0.009301287
 Transaction/COMMIT           |     9 |        2.9605262 |        1173 |              2.3554218 |        0 |                   0 |          1173 |               0.36368033
 Storage/CREATE               |     1 |       0.32894737 |          42 |            0.084337346 |        0 |                   0 |            42 |             0.0130218025
 Database/CREATE_FILE_COPY    |     2 |       0.65789473 |          84 |             0.16867469 |        0 |                   0 |            84 |              0.026043605
 Standby/RUNNING_XACTS        |     6 |        1.9736842 |         316 |              0.6345382 |        0 |                   0 |           316 |               0.09797356
 Standby/INVALIDATIONS        |    45 |        14.802631 |        4018 |               8.068274 |        0 |                   0 |          4018 |                1.2457525
 Heap2/PRUNE                  |     4 |        1.3157895 |         270 |              0.5421687 |        0 |                   0 |           270 |               0.08371159
 Heap2/FREEZE_PAGE            |    27 |         8.881579 |       20904 |              41.975903 |        0 |                   0 |         20904 |                 6.481137
 Heap2/VISIBLE                |    29 |         9.539474 |        1756 |              3.5261045 |    73728 |           27.032736 |         75484 |                23.403278
 Heap2/MULTI_INSERT           |    13 |        4.2763157 |        1049 |              2.1064258 |    12216 |            4.479057 |         13265 |                 4.112719
 Heap/INSERT                  |    19 |             6.25 |        2324 |              4.6666665 |    43884 |           16.090284 |         46208 |                14.326463
 Heap/UPDATE                  |     7 |        2.3026316 |         511 |              1.0261045 |    54340 |           19.924028 |         54851 |                17.006165
 Heap/HOT_UPDATE              |    11 |         3.618421 |        1134 |              2.2771084 |      468 |          0.17159452 |          1602 |               0.49668875
 Heap/LOCK                    |     8 |         2.631579 |         432 |              0.8674699 |        0 |                   0 |           432 |               0.13393854
 Heap/INPLACE                 |    45 |        14.802631 |        9123 |              18.319277 |    16076 |            5.894345 |         25199 |                7.8127713
 Heap/UPDATE+INIT             |     1 |       0.32894737 |         817 |              1.6405623 |        0 |                   0 |           817 |               0.25330505
 Btree/INSERT_LEAF            |    70 |        23.026316 |        5183 |              10.407631 |    72024 |           26.407955 |         77207 |                23.937483
 Btree/DEDUP                  |     1 |       0.32894737 |          64 |             0.12851405 |        0 |                   0 |            64 |              0.019842746
(20 rows)

pg_get_wal_stats_till_end_of_wal(start_lsn pg_lsn, per_record boolean DEFAULT false, "resource_manager/record_type" OUT text, count OUT int8, count_percentage OUT float8, record_length OUT int8, record_length_percentage OUT float8, fpi_length OUT int8, fpi_length_percentage OUT float8, combined_size OUT int8, combined_size_percentage OUT float8) returns setof record

この関数はget_wal_stats)と同じですが、start_lsnからWAL終了までの全ての有効なWALレコードの統計を取得する点が異なります。

F.37.2. 作者

Bharath Rupireddy