Reporting and analysis extension for pgfr_record. Turns raw flight recorder data into anomaly reports, incident forensics, and capacity planning.
What it does
pgfr_analyze reads the snapshot and ring buffer data collected by pgfr_record and provides functions for anomaly detection, performance regression analysis, time-travel forensics, blast radius analysis, capacity planning, and configuration change tracking. It never writes to the core schema -- it only reads and computes.
Optional: pg_stat_statements for query-level analysis
Install
-- Install core first if not already installed
\i _record/install.sql
SELECT pgfr_record.enable();
-- Then install analyze
\i _analyze/install.sql
Quick start
-- Compare two snapshotsSELECT*FROM pgfr_analyze.compare(now() -'1 hour', now());
-- Wait event summary over a time rangeSELECT*FROM pgfr_analyze.wait_summary(now() -'1 hour', now());
-- Generate a diagnostic report for the last hourSELECT pgfr_analyze.report('1 hour');
-- Anomaly report over a time rangeSELECT*FROM pgfr_analyze.anomaly_report(now() -'1 hour', now());
-- What was happening at a specific time?SELECT*FROM pgfr_analyze.what_happened_at('2024-01-15 14:32');
-- Reconstruct an incident timelineSELECT*FROM pgfr_analyze.incident_timeline(
'2024-01-15 14:00'::timestamptz,
'2024-01-15 15:00'::timestamptz
);
-- Detect performance regressionsSELECT*FROM pgfr_analyze.detect_regressions('1 day');
-- Detect query stormsSELECT*FROM pgfr_analyze.detect_query_storms('1 hour');
-- Capacity summarySELECT*FROM pgfr_analyze.capacity_summary('7 days');