用途:面向 PostgreSQL 并发设计、隔离级别选择、DDL 安全性判断,以及排查“SELECT 读到旧行”“表很大但 count(*) 很小”等膨胀症状。
主要能力:解释多进程(非多线程)模型与 MVCC——每个元组带 xmin/xmax,UPDATE 不原地覆盖而是插入新版本并给旧版本打 xmax,DELETE 只设 xmax,死元组由 VACUUM/autovacuum 回收;WAL 是唯一持久化来源,崩溃恢复从最近检查点重放;几乎所有 DDL 可事务化,例外包括 CREATE INDEX CONCURRENTLY、REINDEX CONCURRENTLY、DETACH PARTITION CONCURRENTLY、ALTER TYPE ... ADD VALUE、ALTER SYSTEM、VACUUM、CREATE DATABASE。
必要用法:用 SELECT xmin, xmax, ctid, * FROM my_table WHERE id = 42; 观察可见性;多语句一致性读取用 BEGIN ISOLATION LEVEL REPEATABLE READ;;SERIALIZABLE 需在 SQLSTATE 40001 上重试;批量导入可用 SET LOCAL synchronous_commit = off;;DDL 可放入 BEGIN/COMMIT 原子执行,但 CREATE INDEX CONCURRENTLY 必须在事务外运行,失败会留下 INVALID 索引,需先 DROP INDEX 再重试;批量加载后执行 VACUUM (ANALYZE) 或 COPY ... FREEZE 预热 hint bits。
适用场景:并发写模式与隔离级别选型、参数调优(shared_buffers、work_mem、wal_buffers、synchronous_commit、max_connections)、判断 DDL 是否阻塞生产流量、诊断膨胀与陈旧读取。
限制:不覆盖具体索引设计、VACUUM 调优、锁冲突与死锁、零停机 DDL 执行模式,这些由同系列其他技能处理;xmin/xmax 是 32 位 XID 而非时间戳;n_live_tup/n_dead_tup 为统计值,写入后不会立即更新;生产环境不应使用 VACUUM FULL,shared_buffers 不建议超过内存 40%。