関数定義
- walsizeは、「前回関数実行時のLSN」と「今回関数実行時のLSN」の差分を返却する関数
- 関数の初回実行時には0が返却
- 差分計算に使うLSNを引数指定可能。未指定時は
pg_current_xlog_location()
を使用 - PostgreSQL9.4以降で動作確認済(pg_lsnデータ型未サポートの古いバージョンでは動作NG)
CREATE OR REPLACE FUNCTION walsize
(currlsn pg_lsn DEFAULT pg_current_xlog_location())
RETURNS NUMERIC AS $$
DECLARE
sql TEXT;
prevlsn pg_lsn;
ret NUMERIC;
BEGIN
BEGIN
PERFORM current_setting('walsize.lsn');
EXCEPTION WHEN undefined_object THEN
sql := 'SET walsize.lsn TO ''' || currlsn::TEXT || '''';
EXECUTE sql;
END;
prevlsn := current_setting('walsize.lsn')::pg_lsn;
ret := pg_xlog_location_diff(currlsn, prevlsn);
PERFORM set_config('walsize.lsn', currlsn::TEXT, false);
RETURN ret;
END;
$$ LANGUAGE plpgsql;
関数の利用
INSERT, UPDATE, ...
の一連のSQL群が生成するWALのサイズを調べたいとき
SELECT walsize(); -- 初回実行時は0が返却
INSERT ...
UPDATE ...
...
SELECT walsize(); -- 前回と今回のLSNの差分(WALサイズ)をバイト単位で返却