CREATE FUNCTION generate_histogram() RETURNS TABLE (range text, freq int, bar text) AS $$ DECLARE bucket_id int; query_id int8; BEGIN SELECT bucket, queryid INTO bucket_id, query_id FROM pg_stat_monitor ORDER BY calls DESC LIMIT 1; RETURN QUERY SELECT * FROM histogram(bucket_id, query_id) AS a (range text, freq int, bar text); END $$ LANGUAGE plpgsql; CREATE FUNCTION run_pg_sleep(loops int) RETURNS void AS $$ BEGIN FOR i IN 1..loops LOOP -- 0.4 seconds step used here to hit the same histogram buckets consistently. -- See histogram buckets timing distribution. PERFORM pg_sleep(0.4 * i); END LOOP; END $$ LANGUAGE plpgsql; CREATE FUNCTION wait_for_new_bucket() RETURNS void AS $$ BEGIN -- If the bucket lifetime is less than 8 seconds, we would not fit. IF extract(SECOND FROM now()) > 52 THEN PERFORM pg_sleep(60 - extract(SECOND FROM now())); END IF; END $$ LANGUAGE plpgsql; CREATE EXTENSION pg_stat_monitor; SELECT wait_for_new_bucket(); wait_for_new_bucket --------------------- (1 row) SELECT pg_stat_monitor_reset(); pg_stat_monitor_reset ----------------------- (1 row) SET pg_stat_monitor.pgsm_track = 'all'; SELECT run_pg_sleep(5); run_pg_sleep -------------- (1 row) SELECT substr(query, 0, 50) as query, calls, resp_calls FROM pg_stat_monitor ORDER BY query COLLATE "C"; query | calls | resp_calls ----------------------------------------+-------+----------------------------------------------- SELECT pg_sleep(0.4 * i) | 5 | {0,0,0,0,0,0,0,0,0,0,0,1,1,2,1,0,0,0,0,0,0,0} SELECT pg_stat_monitor_reset() | 1 | {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} SELECT run_pg_sleep(5) | 1 | {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0} SET pg_stat_monitor.pgsm_track = 'all' | 1 | {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} (4 rows) SELECT * FROM generate_histogram(); range | freq | bar ---------------------------+------+-------------------------------- {{0.000 - 1.000} | 0 | (1.000 - 2.778} | 0 | (2.778 - 4.162} | 0 | (4.162 - 6.623} | 0 | (6.623 - 11.000} | 0 | (11.000 - 18.783} | 0 | (18.783 - 32.623} | 0 | (32.623 - 57.234} | 0 | (57.234 - 101.000} | 0 | (101.000 - 178.827} | 0 | (178.827 - 317.226} | 0 | (317.226 - 563.338} | 1 | ■■■■■■■■■■■■■■■ (563.338 - 1000.994} | 1 | ■■■■■■■■■■■■■■■ (1000.994 - 1779.268} | 2 | ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ (1779.268 - 3163.256} | 1 | ■■■■■■■■■■■■■■■ (3163.256 - 5624.371} | 0 | (5624.371 - 10000.920} | 0 | (10000.920 - 17783.643} | 0 | (17783.643 - 31623.492} | 0 | (31623.492 - 56234.598} | 0 | (56234.598 - 100000.000} | 0 | (100000.000 - ...}} | 0 | (22 rows) DROP EXTENSION pg_stat_monitor;