知其然,知其所以然
PostgreSQL 实测 2026-10-30

PostgreSQL 一次 UPDATE 写了多少 WAL:pg_waldump 读记录、整页镜像、full_page_writes 和 unlogged 表实测

实测 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 WAL pg_waldump pg_walinspect full page image full_page_writes unlogged table 检查点 真实验证 动画演示
PostgreSQL 实测 2026-10-30

PostgreSQL synchronous_commit 和 fsync 对吞吐的影响:pgbench 实测,fsync_writethrough 只有 276 tps,批量提交 37595 行/秒对逐行提交 9168 行/秒

实测 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 synchronous_commit fsync wal_sync_method fsync_writethrough pgbench 组提交 批量提交 真实验证 动画演示
PostgreSQL 实测 2026-10-30

LOG: checkpoints are occurring too frequently 怎么办:max_wal_size、log_checkpoints 日志和 checkpoint_completion_target 实测

实测 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 checkpoints are occurring too frequently max_wal_size log_checkpoints checkpoint_completion_target 检查点 真实验证 动画演示
PostgreSQL 实测 2026-10-30

database system was not properly shut down; automatic recovery in progress:PostgreSQL 崩溃恢复要多久,unlogged 表会怎样

实测 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 崩溃恢复 redo not properly shut down kill -9 pg_controldata unlogged table postmaster.pid 真实验证 动画演示
PostgreSQL 实测 2026-10-30

PostgreSQL 为什么需要连接池:新建连接 1.82 ms 对复用 0.051 ms,max_connections 与吞吐、idle in transaction 实测

实测 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 连接 max_connections 连接池 pgbench -C idle in transaction shared_memory_size 连接成本 真实验证 动画演示
PostgreSQL 实测 2026-10-30

FATAL: requested WAL segment has already been removed:PostgreSQL 流复制、同步复制卡住和复制槽实测

实测 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 流复制 pg_basebackup requested WAL segment has already been removed 复制槽 同步复制 SyncRep replication lag 真实验证 动画演示
PostgreSQL 实测 2026-10-30

PostgreSQL 逻辑复制报 duplicate key 卡住了怎么办:replica identity、DDL 不复制和 ALTER SUBSCRIPTION SKIP 实测

实测 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 逻辑复制 publication subscription duplicate key replica identity ALTER SUBSCRIPTION SKIP 复制槽 真实验证 动画演示
PostgreSQL 实测 2026-10-30

FATAL: no pg_hba.conf entry 和 password authentication failed 怎么排查:PostgreSQL 连接报错与 pg_hba_file_rules 实测

实测 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 退出码。

PostgreSQL pg_hba.conf no pg_hba.conf entry password authentication failed scram-sha-256 pg_hba_file_rules Connection refused pg_isready 真实验证 动画演示
京ICP备2026067502号-1京公网安备11010502063487号