LoginSignup
3
2

More than 5 years have passed since last update.

指定期間のLSNの差分(WALサイズ)を計算する関数

Posted at

関数定義

  • 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サイズ)をバイト単位で返却
3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2