Read EXPLAIN (ANALYZE, BUFFERS) like a pro
The BUFFERS option shows shared hit (found in cache) versus read (fetched from disk). A cold query has a few reads; the warm run is all hits, proof of what the cache is doing.
Problem
What you're actually looking at
The symptom as it shows up on a real server.
Timings alone do not tell you whether a query is slow because of disk I/O or CPU. BUFFERS breaks each node into shared hit (served from shared_buffers) and read (fetched from the OS/disk), so you can see cache behavior directly.
Meridian runs the same depot_scans aggregate twice. The first run has a few reads from disk; the second is entirely cache hits, the numbers explain the difference in cost.
Simple terms
A query's timing alone will not tell you whether it is slow because it is reading from disk or because it is burning CPU. Adding the BUFFERS option to EXPLAIN splits every step into two numbers: "shared hit" means the data was already in PostgreSQL's memory cache, and "read" means it had to go to disk for it. Run the same query twice and you can watch the disk reads on the first run turn into pure cache hits on the second, proof of exactly what the cache is doing for you.
Full runbook for this incident
- The full identify checklist, the exact signals that tell you it's this incident
- Every diagnostic query; lab output is attached only to the steps we actually captured
- The resolution path and the pitfalls that make it worse
- Mitigation steps to stop it recurring, plus a verify-you're-done query
Card required. Cancel before day 7 and you are not charged.
More in this category
Other Observability runbooks
Neighbouring incidents that share the same diagnostic surface.
Need the full procedure?
Pro runbooks finish the incident path
Free runbooks teach the shape. Pro opens the full step transcript, edge cases, and prevention depth.