pgAssistant: PostgreSQL 持续优化平台

由 John Doe 九月 22, 2026

pgAssistant 可以对 PostgreSQL 进行深度分析,将分析结果转化为可落地的修复方案,追踪变更情况,并量化评估工作负载的实际优化效果。

目录

pgAssistant

什么是 pgAssistant?

pgAssistant 是一款开源平台,能够将 PostgreSQL 的运行数据转化为优先级明确的优化行动。它将数据库内省分析、工作负载分析、专项检查模块、落地规划、历史数据对比以及效果量化功能整合在同一个 Web 界面中。

pgAssistant Collector 通过历史工作负载与运行环境数据采集扩展了这一闭环,将优化建议与实际观测结果相关联。二者结合,能够帮助团队回答四个核心问题:

  1. 应该优化什么? 发现并分级排序 PostgreSQL 存在的风险、低效问题以及性能调优机会。
  2. 我们决定做什么? 将优化建议整合为有序的执行计划,明确由开发、运维或双方共同负责。
  3. 我们实际修复了什么? 追踪优化建议的全生命周期:新增问题、持续存在的问题、已不再出现的问题,避免简单地认为 “问题消失” 就等于 “优化已落地”。
  4. 效果如何? 将变更与执行时长、调用量、查询类型、PostgreSQL 环境变更以及工作负载影响相关联。

AI 辅助功能为可选项。核心检查逻辑均为确定性规则,无需大语言模型即可使用。

功能演示

执行计划将技术分析结果转化为有序的修复方案,包含优先级、责任方、依赖关系以及实施指导。

pgAssistant Executive Plan

持续优化闭环

pgAssistant 并非实时监控系统。它通过周期性的数据库与工作负载采集构建持续优化闭环;实时监控平台仍然负责观测当前即时状态。

观测 → 诊断 → 优先级排序 → 制定方案 → 落地实施 → 再次采集 → 效果衡量
   ↑                                                                  │
   └────────────────────────── 循环往复 ────────────────────┘

pgAssistant 支撑完整的优化闭环:

  • 观测: 采集器对工作负载、运行环境和检查结果进行可重复的快照采集。
  • 诊断: 确定性检查模块解析 SQL、模式、配置、运维和生命周期相关问题。
  • 优先级排序: 根据紧急程度、置信度、实施成本和实际工作负载影响对问题进行评级。
  • 制定方案: 执行计划将相关优化建议整合为有序的、分团队负责的工作包。
  • 验证: 基于历史数据识别新增和已消失的优化建议,同时明确区分 “观测不到问题” 和 “确认已落地”。
  • 衡量: 工作负载洞察对比历次采集结果,展示性能、查询类型、环境配置和优化建议的变化。

产品各组件共同服务于同一闭环,而非生成零散的报告:

                 PostgreSQL 运行数据
                         │
       ┌─────────────────┼─────────────────┐
       │                 │                 │
 全局检查模块        索引检查模块      参数与运维检查模块
       │                 │                 │
       └─────────────────┼─────────────────┘
                         ↓
                      执行计划
                         ↓
                       落地实施
                         ↓
                    工作负载洞察
                         ↓
                      新的运行数据

workload Insights

workload Insights - Query evolution

从问题发现到落地执行

执行计划将相关问题分组整理为有序的、分团队负责的工作包,明确依赖关系与责任分工,帮助团队从诊断直接推进到执行,而非面对一份杂乱无章的优化建议清单。

优先级 1 — 开发团队
  重写查询 Q42
  在 orders 表的 customer_id 字段上补充缺失的外键索引
优先级 2 — 运维团队
  针对高更新频率的相关表调整自动清理参数
  核查与工作负载相关的 PostgreSQL 配置项
优先级 3 — 开发/运维协同
  删除未使用的索引,评估 public.orders 表的索引优化机会

核心特性

  • 多数据库支持 — 连接单个 PostgreSQL 实例,列出其所有数据库,并选择目标数据库进行分析。
  • 全局检查模块 — 覆盖全数据库的确定性检查,按优先级、置信度、影响范围和实施成本排序。
  • 执行计划 — 整合全局、索引、参数和自动清理的优化建议,形成分配给开发、运维或双方协同的有序工作包。
  • 工作负载洞察 — 对比历次采集数据,突出优化建议和 PostgreSQL 环境的变更,按工作负载影响对查询排序。
  • 持续验证 — 追踪新增、持续存在和已消失的优化建议,避免将 “观测不到问题” 等同于 “确认已优化”。
  • PDF 报告导出 — 生成面向开发和 / 或运维团队的格式化执行计划报告,包含目录、运维要求、依据说明和 SQL 命令。
  • 工作负载优先级分析 — 结合执行频率和总执行影响,识别占用数据库工作负载占比最高的查询。
  • 索引检查模块 — 分析执行计划,识别可落地的索引优化机会、冗余索引和外键覆盖问题。
  • 参数检查模块 — 结合工作负载信号,给出 PostgreSQL 参数调整建议。
  • 自动清理调优 — 分析集群级和表级配置、统计信息过期情况、运维活动,以及表级调优机会。
  • 模式与表分析 — 检查 DDL、表关系、表健康度、索引、膨胀指标和分区表。
  • pgTune 配置生成 — 通过引导式界面生成 PostgreSQL 基础配置方案。
  • 可选大语言模型辅助 — 可请求 SQL 重写、模式设计反馈、命名规范检查和上下文解释。

单数据库与数据库集群模式

pgAssistant 支持两种互补的运行模式:

模式 能力说明
单数据库 深度的 SQL、模式、配置和运维分析,为开发人员和 DBA 提供具体可落地的修复方案。
数据库集群 跨数百或数千个数据库的标准化采集、集中化优先级排序、历史对比和趋势分析。

对于大规模 PostgreSQL 集群,另有两个配套项目实现自动化、集中化的分析:

项目 作用
pgAssistant Collector 在指定的数据库上运行选定的 pgAssistant 任务,并将历史快照存储在集中的 PostgreSQL 仓库中。
pgAssistant Grafana 展示集群范围的优先级和趋势,包括需要关注的数据库、排名靠前的查询、检查结果和优化建议演变情况。

三者结合,团队可以:

  1. 跨环境、应用、分组和责任方采集一致的诊断数据;
  2. 识别哪些数据库需要优先修复;
  3. 从集群总览下钻到单个数据库、查询或优化建议;
  4. 分配并规划开发与运维的修复工作;
  5. 对比历次采集结果,包括工作负载和 PostgreSQL 环境变更;
  6. 追踪高优先级问题是仍然存在还是已不再出现;
  7. 衡量工作负载优化效果,确定下一步优化方向。
PostgreSQL 集群 → 采集器 → 数据仓库 → pgAssistant → 执行计划
       ↑                           ↓             ↓              ↓
       └──────────── 再次采集 ← 效果衡量 ← 实施变更
                                   ↓
                          Grafana 集群总览

在线演示

访问以下地址体验数据库分析界面:https://ov-004f8b.infomaniak.ch/

postgresql://postgres:demo@demo-db:5432/northwind

在 Grafana 演示地址 中探索集群监控面板。演示账号信息可在 pgAssistant Grafana 仓库 中查看。

演示数据库每日重置。AI 功能已禁用:请勿输入个人 API 密钥。

检查模块覆盖范围与实施方案

全局、索引、参数、自动清理和填充因子检查模块生成可复现的优化建议。执行计划按优化目标或影响对象将相关问题整合为有序的工作包,而非零散的检查项和 SQL 命令列表。

查看完整检查模块覆盖范围

当前可用的检查模块覆盖:

  • 全局检查模块 — 数据模型与模式: 外键列数据类型不一致;无主键的表;外键覆盖率低或缺失;序列接近最大值。
  • 全局检查模块 — 索引: 外键上缺失有效索引;唯一索引覆盖了非唯一索引;完全重复的未使用索引;部分重复的低使用率索引;未使用的非约束索引;无效或不可用的索引;索引占表大小比例过高的表。
  • 全局检查模块 — 统计信息、存储与运维: 表统计信息可能过期;预估的表膨胀和死元组量过高;从未执行过清理或自动清理的表;紧急死元组清理;标记为需要自动清理运维的表;集群范围的自动清理负载;导致 PostgreSQL 缓冲缓存命中率低的表;异常长事务。
  • 全局检查模块 — 配置与生命周期: 处于关闭或非最优状态的重要 PostgreSQL 配置项;不再受支持的 PostgreSQL 主版本;可升级的次版本。
  • 索引检查模块 — 查询计划: 针对顺序扫描和残留过滤的索引优化机会;更稳妥的单列或组合索引候选;支撑连接操作的索引;支撑 ORDER BY(包括 ORDER BY ... LIMIT)的索引;支撑 GROUP BY 的索引;识别已存在的等效索引;标注因行数估算偏差或统计信息问题导致不适合自动推荐的场景。
  • 参数检查模块 — 工作负载配置: 基于工作负载和通用计划信号,评估 work_mem、effective_cache_size、random_page_cost、effective_io_concurrency、max_parallel_workers_per_gather 和 max_wal_size 等参数。
  • 自动清理检查模块 — 表级操作: 针对从未分析、统计信息过期、从未清理、清理过期、行更新频繁、死元组压力大的表,给出 ANALYZE、VACUUM 以及表级自动清理调优建议。
  • 自动清理检查模块 — 集群配置: 评估 autovacuum、autovacuum_max_workers、autovacuum_naptime、清理与分析的比例因子和阈值、autovacuum_vacuum_cost_delay、autovacuum_vacuum_cost_limit 以及 log_autovacuum_min_duration。
  • 填充因子检查模块: 识别可能受益于填充因子调整实验的表,结合 HOT 更新效率、索引列更新、清理压力和长事务验证信号,并标注需要逐页检查的分区表。

查询与工作负载分析

pgAssistant 可以分析单条 SQL 语句,也可以分析由 pg_stat_statements 采集的整体工作负载:

  • 通过 EXPLAIN ANALYZE 获取真实执行计划;
  • PostgreSQL 16+ 版本支持参数化查询的通用计划;
  • 连接、扫描、排序、聚合、缓冲区、WAL 和行数估算洞察;
  • 结合模式和列统计信息给出索引建议;
  • 查询参数映射与配置核查;
  • 涉及表的关系可视化。

注意:EXPLAIN ANALYZE 会实际执行语句。请仔细核查查询内容,并使用合适权限的数据库账号,在开发环境外尤其需要注意。

界面截图

控制面板

pgAssistant dashboard

全局检查模块概览

Global Advisor summary

全局检查模块优化建议

Global Advisor recommendations

执行计划 PDF 报告

Executive Plan PDF reporting

工作负载优先级排序

Workload prioritization

索引检查模块

Index Advisor

自动清理调优

Autovacuum tuning

参考

Github: https://github.com/beh74/pgassistant-community