↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

Dasha 1.10:Patroni 自动发现、等待分析与复制槽失效预测

发布于 2026-11-09,Dasha
相关开源软件

Dasha 是面向 PostgreSQL 集群的开源性能仪表盘。它使用只读角色连接集群,展示数据库当前的运行情况,并给出处理建议。数据库主机上无需安装代理,也不需要已有扩展之外的新扩展。

一个 Dasha 实例可以管理多个集群及其全部副本。PostgreSQL 的大多数统计信息以实例为单位记录,不会随复制传输,因此 Dasha 会读取集群中的每台主机,再综合分析。某个索引在主库上看似未使用,却可能承担备库的全部读取负载。

自上次公告以来的新增功能

  • 从 etcd v3 或 Consul 发现 Patroni 集群。 Dasha 读取 Patroni 在 DCS 中保存的键,把每个 Patroni scope 转换成一个集群:成员对应主机,数据库列表则从 PostgreSQL 读取。新集群、副本丢失、数据库创建与删除会在刷新周期内反映出来。DCS 始终只读,不会写入。每个 scope 可以单独覆盖用户名、密码、端口和数据库过滤条件;etcd 与 Consul 均支持 TLS 和客户端证书。主机选择器会在地址旁显示成员名称。
  • 备用集群关联。 Patroni 备用集群的概览页和复制页会显示其上游集群,主集群也会显示下游备用集群。集群按 PostgreSQL 系统标识符匹配,因此通过 VIP 连接的备用集群也能被识别。
  • 活动与等待分析(PostgreSQL 14+)。每隔 1–10 秒采样 pg_stat_activity,按 CPU、等待事件类型(IO、Lock、LWLock 等)和事务内空闲状态绘制活动会话实时图。下方列出主要语句、会话、数据库、用户、应用和等待事件;点击某个值即可添加过滤条件,语句还可跳转至查询报告和锁树。语句按 query_id 分组。此功能无需扩展;无论多少人同时查看页面,每个 Dasha 实例对同一主机的 pg_stat_activity 最多每秒读取一次。
  • 复制槽失效预测。 Dasha 在选定的时间窗口(30 秒至 5 分钟)内测量 WAL 生成速率,并为每个复制槽展示保留的 WAL、距离 max_slot_wal_keep_size 上限的剩余额度,以及预计多久后复制槽会失效。测量按服务器时钟采集两次 LSN,两次采样之间不占用连接。
  • COPY 进度(PostgreSQL 14+)。展示表、数据源类型、已处理的字节数与行数、被排除和跳过的行数;已知总量时还会显示百分比与预计完成时间。COPY FROM 服务器端文件时使用文件大小,COPY TO 则使用行数估计。
  • 使用标准 exporter 计算健康评分。 健康评分的时序模式现在支持普通的 postgres_exporter、node_exporter 和 pgbouncer_exporter,可直接使用已有 Prometheus 或 VictoriaMetrics 环境。Patroni 集群的指标会按 scope 和成员名称自动映射。
  • 不再因冷表扣分。 超过不活跃阈值(默认 7 天)没有写入的表,不再因死元组或缺少清理而降低评分。需要执行一次 VACUUM (FREEZE, ANALYZE) 的冷表会单独列为建议;维护页可筛选全部表、活跃表或冷表。

功能

  • 健康评分: 每个实例按八个类别计算 0–100 分的综合评分,并给出关联到具体数据库、按优先级排序的建议。也可从 Prometheus/VictoriaMetrics 时序数据计算,展示趋势与季节性基线。
  • 查询分析: 按执行时间和 WAL 量排列主要查询,展示运行中及被阻塞查询的等待事件,并提供 pg_stat_statements 快照。快照可保存到存储数据库,通过 URL 分享,并与另一份快照或实时数据比较。
  • 索引建议与分析: 从每台主机的 pg_stat_statements 中提出缺失的 B-tree 索引建议,也可结合日志中的 auto_explain 执行计划。分析膨胀、重复和无效索引;判断“是否可以删除此索引”时会考虑统计重置、各主机计数器及分区索引,而非仅凭 idx_scan = 0。
  • 模式检查: 提供 17 项结构缺陷检查,例如即将耗尽的序列、没有主键的表,以及允许所有人创建对象的 public 模式;每项都有严重程度和修复 SQL。
  • I/O 分析: 基于 PostgreSQL 16+ 的 pg_stat_io,并支持 PostgreSQL 18 的 WAL 统计。
  • 日志洞察: 可搜索 OpenSearch、Elasticsearch、VictoriaLogs 和 Yandex Managed PostgreSQL 中的日志,分类事件,展示带分析结果的 auto_explain 计划树,并比较两个时间窗口之间的计划回退。
  • 自动快照: 独立守护进程会在活动突增或主从角色变化时采集查询及实例范围的锁争用快照,便于第二天追查凌晨发生的问题。
  • 表与维护: 展示包含 TOAST 明细的大小、逐表结构,以及按 PostgreSQL 自身公式计算的自动清理和事务 ID 回卷阈值。还包括 VACUUM、ANALYZE、CREATE INDEX、CLUSTER、基础备份和 COPY 的进度,并从定时差分快照识别热点表和索引。
  • 集群发现: 支持静态列表、通过 etcd 或 Consul 发现 Patroni 集群,以及 Yandex Managed Service for PostgreSQL;数据库从集群本身发现。
  • 访问控制: 提供开放访问、静态 API 密钥、带加密会话 Cookie 的 OIDC 三种认证模式,以及 Casbin RBAC、个人访问令牌和按身份限流。
  • MCP 连接器: 只读 MCP 服务器可向 AI 助手提供集群诊断,包含 35 个工具,覆盖索引建议、模式检查、I/O、日志搜索、计划回退及实时活动采样;还提供 5 个提示词、用户令牌透传,以及评分规则的内嵌知识库。

界面支持英语、俄语和德语。

运行要求

  • 被监控集群使用 PostgreSQL 14 或更高版本(已在 14–19 beta 上测试),连接角色须拥有 pg_monitor 及每个被监控数据库的 CONNECT 权限。
  • 查询统计需要 pg_stat_statements(Postgres Pro 可用 pgpro_stats);pgstattuple 为可选扩展。
  • 活动与等待分析要求将 compute_query_id 设为 on,或者设为 auto 并预加载 pg_stat_statements 或 pgpro_stats。
  • I/O 页面需要 PostgreSQL 16 或更高版本。
  • 可选:用于发现 Patroni 集群的 etcd v3 或 Consul 只读权限。
  • 可选:用于日志搜索和执行计划洞察的日志源(OpenSearch、Elasticsearch、VictoriaLogs 或 Yandex Managed PostgreSQL);计划分析还需启用 auto_explain。
  • 可选:独立的 PostgreSQL 数据库,用于存储快照、热点对象历史和个人访问令牌。其他功能无需此数据库即可运行。

文档

许可证

Dasha 使用 GNU General Public License v3.0,详见 LICENSE。

项目地址:github.com/dbulashev/dasha。