Dasha is an open source performance dashboard for PostgreSQL fleets. It 
connects to your clusters with a read-only role, shows what the databases are 
doing right now, and explains what to do about it. Nothing is installed on the 
database hosts: no agent, and no extension beyond the ones you already have.

One instance serves many clusters and all of their replicas. Most PostgreSQL 
statistics are per-instance and are not replicated, so Dasha reads every host 
of a cluster and reasons over the combined picture. An index that looks unused 
on the primary may be serving the entire read workload on a standby.

### New since the last announcement

* **Index recommendations.** Dasha reads `pg_stat_statements` on every host of 
a cluster and proposes the B-tree indexes that are missing. Each candidate 
comes with its column order, a ready `CREATE INDEX CONCURRENTLY`, the 
statements it covers and their share of execution time. Write counters and 
partitioned tables (`ATTACH PARTITION`) are taken into account. A candidate can 
be backed by `auto_explain` plans from the log: sequential scans of its table, 
what they cost and how many rows their filters discarded. A misestimated row 
count raises a warning to run `ANALYZE` first.
* **I/O page** built on `pg_stat_io` (PostgreSQL 16+). Server I/O is broken 
down by backend type, object and context (normal, vacuum, bulkread, bulkwrite), 
with WAL on PostgreSQL 18. There is a live mode and snapshot history, and cards 
for `shared_buffers` efficiency, vacuum cost and bulk operations.
* **Schema checks.** 17 checks for structural defects that stay invisible until 
something breaks, including sequences close to exhaustion, tables without a 
primary or unique key, forgotten `UNLOGGED` relations, a `public` schema anyone 
can create objects in (CVE-2018-1058), UUIDs stored as `varchar`, nullable 
foreign keys, `NOT VALID` constraints that were never validated and reserved 
keywords used as names. Each finding has a severity and remediation SQL.
* **Log insights.** Log search now works with OpenSearch, Elasticsearch and 
VictoriaLogs, as well as Yandex Managed PostgreSQL. A time window is grouped 
into event categories (deadlocks, lock waits, cancellations, checkpoints, 
autovacuum, temp files, errors) with frequent message templates. `auto_explain` 
plans are grouped by statement and plan shape. The plan tree flags sequential 
scans of large tables, row estimates that are off by orders of magnitude and 
sorts that spilled to disk. Comparing two windows lists the statements whose 
plans got worse.
* **Per-database query analysis.** The query report and the Top 10 panels 
switch between the current database and the whole instance.
* **Postgres Pro support.** When `pg_stat_statements` is not available, Dasha 
reads `pgpro_stats`, with no configuration needed.
* **Automatic database discovery.** Dasha asks the cluster for its database 
list and keeps it current.

### Features

* **Health Score:** a composite 0-100 score per instance across eight 
categories, with prioritized recommendations tied to a specific database. 
Optionally computed from Prometheus/VictoriaMetrics time series, with a trend 
and a seasonal baseline.
* **Query analysis:** top queries by execution time and WAL, running and 
blocked queries with wait events, and `pg_stat_statements` snapshots. Snapshots 
can be saved to a storage database, shared by URL, and diffed against another 
snapshot or against live data.
* **Automatic snapshots:** a separate daemon captures query and instance-wide 
lock-contention snapshots on activity spikes or primary/replica role changes. 
The evidence is there the next morning when someone asks what happened at 03:00.
* **Index analysis:** bloat, duplicates, invalid indexes and B-tree on arrays. 
It also answers "may I drop this index?", accounting for statistics resets, 
per-host counters and partitioned indexes rather than trusting `idx_scan = 0`.
* **Tables and maintenance:** size with a TOAST breakdown, per-table describe, 
and autovacuum and wraparound thresholds computed with PostgreSQL's own 
formula. Also vacuum progress, and hot tables and indexes derived from 
scheduled delta snapshots.
* **Locks, waits, connections:** lock trees, wait events grouped by type, 
connection states and sources, and active session details.
* **Access control:** three auth modes (open, static API keys, or OIDC with 
encrypted session cookies), Casbin RBAC, personal access tokens and 
per-identity rate limiting.
* **MCP connector:** a read-only MCP server that gives AI assistants the fleet 
diagnostics. It has 31 tools, including index recommendations, schema checks, 
I/O, log search and plan regressions. It also has 5 prompts, per-user token 
passthrough and an embedded knowledge base of the scoring rules.

The interface is available in English, Russian and German.

### Requirements

* PostgreSQL 14 or newer (tested on 14-18) for the monitored clusters, 
reachable with a role holding `pg_monitor` and `CONNECT` on every monitored 
database.
* `pg_stat_statements` (or `pgpro_stats` on Postgres Pro) for query statistics; 
`pgstattuple` is optional.
* The I/O page requires PostgreSQL 16 or newer.
* Optional: a log source (OpenSearch, Elasticsearch, VictoriaLogs or Yandex 
Managed PostgreSQL) for log search and plan insights, with `auto_explain` 
enabled for plan analysis.
* Optional: a separate PostgreSQL database for snapshots, hot-object history 
and personal access tokens. Everything else works without it.

### Documentation

* [README](https://github.com/dbulashev/dasha#readme): configuration, 
monitoring role privileges, deployment, Helm values
* [Health Score scoring 
model](https://github.com/dbulashev/dasha/blob/main/README-health-score.md)
* [Changelog](https://github.com/dbulashev/dasha/blob/main/CHANGELOG.md)

Reply via email to