进程与 WAL
实例名示例:pg_app,数据目录 /var/lib/postgresql/16/pg_app。
谁在跑
SELECT pid, usename, application_name, client_addr, state, wait_event_type, wait_event, query
FROM pg_stat_activity
WHERE datname = 'appdb';
client_addr 若要记录,改成文档网段 203.0.113.0/24。不要贴真实办公网。
后台常见角色:checkpointer、background writer、walwriter、autovacuum launcher、stats collector(版本不同名字会变)。
WAL 是干什么的
改数据页之前先记日志。崩溃后用 WAL redo。复制、归档、时间点恢复都建立在 WAL 上。
SHOW wal_level;
SHOW archive_mode;
SHOW max_wal_size;
SELECT pg_current_wal_lsn();
wal_level 至少 replica 才能做常规流复制。logical 才支持逻辑解码。
检查点
检查点把脏页落到数据文件,并决定哪些 WAL 可以回收。检查点过于频繁会打磁盘;过于稀疏会让恢复变慢。
SELECT checkpoints_timed, checkpoints_req, checkpoint_write_time
FROM pg_stat_bgwriter;
注意
磁盘满在 WAL 目录上,实例可能无法继续写而停住。监控 pg_wal 所在文件系统,不要只看数据盘。