实测 PostgreSQL 16.15 的 WAL:检查点后第一次修改一页,UPDATE 写 18256 字节,同一页的下一行只有 176 字节(整页镜像);pg_waldump 读出 Heap LOCK、UPDATE、Btree INSERT_LEAF、COMMIT 四条记录;更新 1000 行 480280 字节对 309056 字节;full_page_writes off 省下 494128 → 299400;unlogged 和临时表 0 WAL。
实测 PostgreSQL 16.15 的提交与刷盘:macOS 上默认 open_datasync 约 2 万次/秒,fsync_writethrough 只有 342.777 次/秒;pgbench 同步提交 1 个连接 3778 tps、16 个连接 12609 tps(组提交);synchronous_commit = off 5526 tps;fsync_writethrough 276 tps;批量提交 37595 行/秒对逐行提交 9168 行/秒。
实测 PostgreSQL 16.15 日志警告 checkpoints are occurring too frequently:max_wal_size 64MB 时 10 秒 22 次 WAL 触发的检查点;log_checkpoints 日志怎么读;max_wal_size 调到 1GB 后 requested 为 0;checkpoint_completion_target 0.9 与 0.1 的 write 阶段 26.1 s 对 2.6 s;手动 CHECKPOINT 耗时随脏页数增长。
实测 PostgreSQL 16.15 崩溃恢复:kill -9 一个后端会断开所有连接并自动恢复(0.06 s);kill -9 postmaster 后启动日志 not properly shut down; automatic recovery in progress;崩溃前 8 MB / 61 MB / 230 MB WAL 对应启动 0.13 s / 0.26 s / 0.56 s;unlogged 表恢复后被清空;正常关闭不需要 redo。
实测 PostgreSQL 16.15 的连接成本:新建连接 1.82 ms 对复用 0.051 ms;pgbench -S 持久连接 82406 tps 对每个事务重连 1393 tps;10 核机器上 64 个连接吞吐到顶 107795 tps,256 个连接延迟 2.564 ms;max_connections 100 到 5000 共享内存 279MB 到 513MB;idle in transaction 与 idle_in_transaction_session_timeout。
实测 PostgreSQL 16.15 流复制:pg_basebackup -R 搭备库;单行提交的备库可见延迟 0.15 ms;同步复制备库停掉后提交卡在 SyncRep,cancel 后 WARNING canceling wait for synchronous replication;备库停机 264 MB WAL 后报 requested WAL segment has already been removed;复制槽保留 198 MB WAL 让备库追平。
实测 PostgreSQL 16.15 逻辑复制:建订阅 0.12 s 拷贝 1000 行;订阅端冲突报 duplicate key 并不停重试,alter subscription skip (lsn) 跳过;无主键表 UPDATE 报 cannot update table because it does not have a replica identity;DDL 不复制报 missing replicated column;序列不复制;订阅端停机槽保留 65 MB WAL,drop subscription 后要手动删槽。
实测 PostgreSQL 16.15 连接报错:no pg_hba.conf entry for host "127.0.0.1", user, database, no encryption 怎么看;password authentication failed 的真正原因只在服务器日志 DETAIL(Connection matched file … line 2 / has no password assigned);reject 与 trust 的顺序;pg_hba_file_rules 的 error 列提前查语法;Connection refused 与 No such file or directory;pg_isready 退出码。