=> ALTER SYSTEM SET checkpoint_timeout = '30s';
ALTER SYSTEM
=> ALTER SYSTEM SET min_wal_size = '16MB';
ALTER SYSTEM
=> ALTER SYSTEM SET max_wal_size = '16MB';
ALTER SYSTEM
=> SELECT pg_reload_conf();
pg_reload_conf ---------------- t (1 row)
Инициализируем таблицы.
=> CREATE DATABASE wal_checkpoint;
CREATE DATABASE
student$ pgbench -i wal_checkpoint
NOTICE: table "pgbench_history" does not exist, skipping NOTICE: table "pgbench_tellers" does not exist, skipping NOTICE: table "pgbench_accounts" does not exist, skipping NOTICE: table "pgbench_branches" does not exist, skipping creating tables... 100000 of 100000 tuples (100%) done (elapsed 0.13 s, remaining 0.00 s) vacuum... set primary keys... done.
Сбросим статистику.
=> SELECT pg_stat_reset_shared('bgwriter');
pg_stat_reset_shared ---------------------- (1 row)
Запускаем pgbench, предварительно запомнив позицию в журнале.
=> SELECT pg_current_wal_insert_lsn();
pg_current_wal_insert_lsn --------------------------- 0/2D0B6BF8 (1 row)
student$ pgbench -T 180 -R 100 wal_checkpoint
starting vacuum...end. transaction type: <builtin: TPC-B (sort of)> scaling factor: 1 query mode: simple number of clients: 1 number of threads: 1 duration: 180 s number of transactions actually processed: 17838 latency average = 2.358 ms latency stddev = 1.637 ms rate limit schedule lag: avg 0.526 (max 41.345) ms tps = 99.112160 (including connections establishing) tps = 99.113887 (excluding connections establishing)
=> SELECT pg_current_wal_insert_lsn();
pg_current_wal_insert_lsn --------------------------- 0/327F3210 (1 row)
=> SELECT pg_size_pretty('0/327F3210'::pg_lsn - '0/2D0B6BF8'::pg_lsn);
pg_size_pretty ---------------- 87 MB (1 row)
Статистика:
=> SELECT checkpoints_timed, checkpoints_req FROM pg_stat_bgwriter;
checkpoints_timed | checkpoints_req -------------------+----------------- 3 | 5 (1 row)
Несмотря на то, что в среднем объем журнальных записей за контрольную точку не превосходит установленного предела, часть контрольных точек выполнялась не по расписанию. Это говорит о неравномерности потока журнальных записей (вызванной выполнением автоочистки и другими причинами).
Поэтому в реальной системе замеры лучше выполнять на достаточно больших интервалах времени.
=> ALTER SYSTEM RESET ALL;
ALTER SYSTEM
=> SELECT pg_reload_conf();
pg_reload_conf ---------------- t (1 row)