跳到正文

PostgreSQL 生产检查清单 ​

适用 PostgreSQL 13+、pgvector 0.8.x。每条都可勾选,括号内是默认值或判断依据;版本差异以官方文档为准。 这份清单只列「不做会出事」的动作,机制解释见各篇正文。

上线前 ​

  • [ ] 内存参数按比例给:shared_buffers=物理内存 25%、effective_cache_size=75%;work_mem 按并发算(默认 4MB,以官方文档为准),一个查询的多个 Sort/Hash 各占一份。
  • [ ] 连接数走池:PgBouncer 用 pool_mode=transaction,max_connections=200–500;按每连接约 10MB 估内存,max_client_conn/default_pool_size 压到后端能承受。
  • [ ] VACUUM 与回卷余量:autovacuum 常开,大表 autovacuum_vacuum_scale_factor=0.01(默认 0.2,以官方文档为准);死元组占比 >20% 告警;监控 age(datfrozenxid) 距 autovacuum_freeze_max_age=2 亿 的余量。
  • [ ] 备份与切换都演练过:pg_basebackup -X stream + WAL 归档(archive_mode=on、archive_timeout=60),pgBackRest/Barman 做保留校验;至少 1 个同步 Standby + Patroni 3 节点 etcd;本季度做过一次 PITR 恢复和一次主库切换。
  • [ ] DDL 不锁全表:大表建索引用 CREATE INDEX CONCURRENTLY,空间回收用 pg_repack;禁止业务高峰执行 VACUUM FULL(ACCESS EXCLUSIVE 阻塞全表)。
  • [ ] JSONB 索引用对:GIN 索引用 jsonb_path_ops,查询必须写 @>;->> 条件单独建表达式索引,否则退化为全表扫描。
  • [ ] pgvector 参数匹配:距离运算符与 opclass 对应(<=> ↔ vector_cosine_ops);maintenance_work_mem 覆盖建索引批次;按「向量+图」估内存(1536 维 float32 约 6KB/条)。

运行中 ​

  • [ ] SQL 与计划:pg_stat_statements 按 total_exec_time 看 Top SQL;log_min_duration_statement=1000(ms)配 auto_explain;shared_blks_hit/(shared_blks_hit+shared_blks_read) 命中率下降先查内存与慢 SQL。
  • [ ] 会话与等待:pg_stat_activity 中 state<>'idle' 且 xact_start 超过 5 秒的会话;wait_event 长期不变说明在等锁或 IO。
  • [ ] 复制、归档与膨胀:pg_last_wal_receive_lsn() - pg_last_wal_replay_lsn() 字节差;pg_stat_archiver 的失败数与最后归档时间;死元组和索引膨胀按周看趋势。

故障时 ​

  • [ ] 磁盘只涨不降、DELETE 后不回收 → pg_stat_user_tables.n_dead_tup/n_live_tup + last_autovacuum → VACUUM 跟不上 → 调低 scale_factor,必要时 pg_repack。
  • [ ] 数据库突然只读、报事务 ID 相关错误 → age(datfrozenxid) 接近 2 亿 → 已到回卷保护 → 立即 VACUUM FREEZE,不要靠重启硬扛。
  • [ ] 报 too many clients → pg_stat_activity 按 state 计数对比 max_connections → 连接泄漏或池配置错误 → 修连接池,不要直接调大 max_connections。
  • [ ] DDL/查询卡住、后续全排队 → pg_blocking_pids(pid) + pg_locks → 有会话持有 ACCESS EXCLUSIVE → 终止阻塞者或改 CONCURRENTLY;deadlock_timeout=1s,开 log_lock_waits。
  • [ ] 查询变慢、计划出现 Seq Scan → EXPLAIN (ANALYZE, BUFFERS) 对比 rows 预估与 actual → 统计信息过期先 ANALYZE,仍偏再建扩展统计;JSONB 则确认是否用了 @>。

把一门技术讲透到既懂也会用