Tihiroのストレスフリーな生活

少しだけ頭使って後は根性

PostgreSQLで現在書き込み中のWALのファイル名を確認する。

確認する

書き込み対象のWALファイルの名前を確認する(WALログ書き込み位置 → WALファイル名)。

PostgreSQL 10以降

pg_walfile_nameとpg_current_wal_lsnを組み合わせて確認します。

SELECT pg_walfile_name( pg_current_wal_lsn() );

な感じです。

PostgreSQL 9.6以前

SELECT pg_xlogfile_name( pg_current_xlog_location () );

でOKな感じです。

WALファイルからWALログの書き込み位置を確認する(WALファイル名 → WALログ書き込み位置)。

SQLではできません。pg_waldump/pg_xlogdumpを使います。

PostgreSQL 10以降

pg_waldump <pg_wal内のWALファイル名>

PostgreSQL 9.6以前

pg_xlogdump <pg_xlog内のWALファイル名>

指定したWALログ書き込み位置からバイトオフセットを確認する(WALログ書込み位置 → バイトオフセット)

オフセット=基準点からの距離

バイトオフセット=どれだけ書き込まれているか?

WALログ書込み位置は16進数になっているため、分かりやすい10進数のバイト表現に変換する。

PostgreSQL 10以降

SELECT pg_walfile_name_offset( <pg_waldumpで確認したWALログ書込み位置> );

PostgreSQL 9.6以前

SELECT pg_xlogfile_name_offset( <pg_xlogdumpで確認したWALログ書込み位置> );

WALファイルの書き込み量を確認する

特定のWALログの書込み位置から別のWALファイルログ書込み位置までの書き込み量が何バイトぐらいあるのかを知りたい。

PostgreSQL 10以降

SELECT pg_wal_lsn_diff(<pg_xlogdumpで確認したWALログ書込み位置>, <pg_xlogdumpで確認したWALログ書込み位置>);

PostgreSQL 9.6以前

PostgreSQL 10以降みたいに関数は用意されていないので、自分で計算する。

SELECT pg_xlogfile_name_offset( <pg_xlogdumpで確認したWALログ書込み位置> );

で出力されたバイトオフセットを引いてやることで算出できる。