用途:针对 PostgreSQL 17/18+ 做性能调优,覆盖 I/O、查询执行、索引与日常维护。适用于诊断慢查询、配置异步 I/O、调整 shared_buffers 与 work_mem、为写密集负载优化索引、处理表膨胀以及 pgvector HNSW 调优。不适用于模式设计、应用层缓存策略、数据库选型或 ORM 查询生成。
主要能力:PG18 原生异步 I/O(io_method = worker 或 io_uring,仅读操作,写仍同步);EXPLAIN (ANALYZE, BUFFERS, SETTINGS) 查询计划取证,PG18 下 ANALYZE 自动包含 BUFFERS;B-tree 跳扫(复合索引,尾列等值、前缀低基数);内置 uuidv7() 时间有序主键;autovacuum 调优(如 autovacuum_vacuum_scale_factor = 0.01);BRIN、GIN、HNSW 等索引策略;WAL 压缩(wal_compression = zstd);检查点调优。
监控视图:pg_stat_statements、pg_stat_io、pg_stat_checkpointer(PG17+)、pg_stat_user_tables、pg_statio_user_tables、pg_aios(PG18+)。
使用方式:先从 pg_stat_statements 按 total_exec_time 找慢查询,用 EXPLAIN 分析计划,检查缓冲区命中率(目标 > 99%),通过 pg_stat_io 观察 I/O,再以针对性索引、work_mem 调整或查询重写优化,最后用 EXPLAIN 对比验证。
限制与常见错误:PG18 AIO 不加速写;io_uring 仅限 Linux 5.1+ 且需 --with-liburing 构建;跳扫仅支持尾列等值;shared_buffers 建议从内存 25% 起,勿超 40% 而未压测;PG17+ 检查点统计已移至 pg_stat_checkpointer;避免过度索引与高频 SELECT *。
版本变化:PG18 引入原生 AIO、uuidv7()、跳扫、pg_aios,effective_io_concurrency 默认由 1 改为 16;PG17 检查点统计迁移并重命名列;PG15 起 wal_compression 支持 pglz、lz4、zstd。