Skip to main content
View rawEdit

01. Single node performance overview (high-level)

Start here when performance is unclear or the app is slow right now. This dashboard gives you the fastest path to understanding what is happening at the node level.

When to use

  • The app is slow or timing out — you need a quick assessment
  • You want to check the overall health of a Postgres node
  • You need to identify which area (queries, locks, IO, vacuum) to investigate next

Key panels

Sessions and activity

  • Active Session History (ASH) — stacked area chart showing sessions by wait type over time. This is the single most useful panel for understanding what the database is doing.
  • Sessions — breakdown of active, idle, and idle-in-transaction connections
  • Non-idle Sessions — focused view on sessions that are actually doing work

Throughput

  • TPS — transactions per second (commits and rollbacks)
  • QPS (pg_stat_statements) — queries per second from pg_stat_statements
  • Tuples operations per second — inserts, updates, deletes, fetches

Query performance

  • Query total time — total query execution time per second
  • Query time per call (latency) — average query latency

I/O

  • blk_reads and blk_hits per second — buffer cache effectiveness
  • blk_read_time and blk_write_time — time spent on disk I/O
  • WAL bytes per second — write-ahead log generation rate
  • temp_bytes written per second — temporary file usage (indicates queries spilling to disk)

Maintenance

  • Locks by mode — current lock distribution
  • Longest non-idle transaction age — transactions running longer than 1 minute
  • Transaction ID freeze age — proximity to wraparound
  • Background writer and checkpointer — checkpoint frequency and buffer management
  • Vacuum timeline — recent vacuum activity
  • DB logical size distribution — database size breakdown

What good looks like

  • Active sessions are low and stable relative to available CPU cores
  • Wait distribution is mostly CPU or Client (not sustained IO or Lock waits)
  • Idle-in-transaction sessions are near zero
  • No long-running transactions (> 1 minute in OLTP)
  • WAL generation rate is stable
  • Temp bytes are minimal or zero

What to investigate

SignalNext step
IO waits dominating ASHGo to Wait event analysis
Lock waits visibleGo to Lock contention
High query latency or CPUGo to Query performance (top-N)
Long-running transactionsCheck for idle-in-transaction sessions, missing idle_in_transaction_session_timeout
High temp bytesQueries need more work_mem or query plan optimization
Freeze age approaching limitAutovacuum may need tuning — check Autovacuum and bloat
  • A003 — Postgres settings (CLI)
  • G001 — memory-related settings (CLI)
  • K003 — top queries by total time (monitoring stack)
  • N001 — wait events grouped by type and query (monitoring stack)