資料庫在進行相關的效能調教評估,像是 checkpoint_timeout 與 max_wal_size 的大小設定,就會需要了解資料庫的一段時間內的交易量大小。
一般來說最簡單查看的方式會是對實際的交易檔案 WAL 產出時間/大小來判斷,但這樣的方式會受到 Archive 狀況影響,也不是很好查看。
在 PostgreSQL 內建相關的 WAL 操作語法可以很簡單的查看交易量,透過 pg_wal_lsn_diff (pg_xlog_location_diff) 這個 Function 去比對不同時段 lsn 位置差異即可以得出交易量大小,平常僅需要定期透過排程去收集 pg_current_wal_lsn(pg_current_xlog_location) 的紀錄,就可以根據需要查看的時間區間進行比對查看。
edb=# select pg_current_wal_lsn();
pg_current_wal_lsn
--------------------
20/3B000148
(1 row)
edb=# – 一些交易
edb=# create table ta (id int);
CREATE TABLE
edb=# select pg_current_wal_lsn();
pg_current_wal_lsn
--------------------
20/3B014C40
(1 row)
edb=# select pg_size_pretty(pg_wal_lsn_diff('20/3B014C40','20/3B000148'));
pg_size_pretty
----------------
83 kB
(1 row)