@@ -15,10 +15,11 @@ CREATE TEMP TABLE _benchmark (
1515
1616-- slightly modified from "How to benchmark PostgreSQL queries well"
1717-- https://www.tangramvision.com/blog/how-to-benchmark-postgresql-queries-well#sql-function-with-clock_timestamp
18- CREATE OR REPLACE FUNCTION bench (_filename TEXT , _query TEXT , _iterations INTEGER = 100 )
18+ CREATE OR REPLACE FUNCTION bench (_filename TEXT , _query TEXT , _iterations INTEGER )
1919RETURNS void
2020AS $$
2121DECLARE
22+ _warmup_iterations INTEGER ;
2223 _start TIMESTAMPTZ ;
2324 _end TIMESTAMPTZ ;
2425 _delta DOUBLE PRECISION ;
2829 );
2930
3031 -- Warm the cache
31- FOR i IN 1 ..10 LOOP
32+ _warmup_iterations = GREATEST(3 , _iterations / 10 );
33+ FOR i IN 1 .._warmup_iterations LOOP
3234 EXECUTE _query;
3335 END LOOP;
3436
6062$$
6163LANGUAGE plpgsql;
6264
65+ -- We aim for ~4s per benchmark, but take more time for slow benchmarks.
66+ -- Apple Silicon M2, most queries seem to be single-threaded.
6367\set query ` cat arrs_deps_by_non_existent_stop.sql`
64- SELECT bench(' arrs_deps_by_non_existent_stop.sql' , :' query' );
68+ SELECT bench(' arrs_deps_by_non_existent_stop.sql' , :' query' , 500 );
6569\set query ` cat arrs_deps_by_route_name_and_time.sql`
66- SELECT bench(' arrs_deps_by_route_name_and_time.sql' , :' query' );
70+ SELECT bench(' arrs_deps_by_route_name_and_time.sql' , :' query' , 90 );
6771\set query ` cat arrs_deps_by_station_and_time.sql`
68- SELECT bench(' arrs_deps_by_station_and_time.sql' , :' query' , 40 );
72+ SELECT bench(' arrs_deps_by_station_and_time.sql' , :' query' , 170 );
6973\set query ` cat arrs_deps_by_station_and_time_seq_0.sql`
70- SELECT bench(' arrs_deps_by_station_and_time_seq_0.sql' , :' query' , 50 );
74+ SELECT bench(' arrs_deps_by_station_and_time_seq_0.sql' , :' query' , 500 );
7175\set query ` cat arrs_deps_by_stop.sql`
72- SELECT bench(' arrs_deps_by_stop.sql' , :' query' );
76+ SELECT bench(' arrs_deps_by_stop.sql' , :' query' , 50 );
7377\set query ` cat arrs_deps_by_stop_and_time.sql`
74- SELECT bench(' arrs_deps_by_stop_and_time.sql' , :' query' );
78+ SELECT bench(' arrs_deps_by_stop_and_time.sql' , :' query' , 400 );
7579\set query ` cat arrs_deps_by_time.sql`
76- SELECT bench(' arrs_deps_by_time.sql' , :' query' , 10 );
80+ SELECT bench(' arrs_deps_by_time.sql' , :' query' , 5 );
7781\set query ` cat arrs_deps_by_time_manual.sql`
78- SELECT bench(' arrs_deps_by_time_manual.sql' , :' query' , 10 );
82+ SELECT bench(' arrs_deps_by_time_manual.sql' , :' query' , 5 );
7983\set query ` cat arrs_deps_by_trip_and_date.sql`
80- SELECT bench(' arrs_deps_by_trip_and_date.sql' , :' query' );
84+ SELECT bench(' arrs_deps_by_trip_and_date.sql' , :' query' , 500 );
8185\set query ` cat connections_by_non_existent_stop.sql`
82- SELECT bench(' connections_by_non_existent_stop.sql' , :' query' );
86+ SELECT bench(' connections_by_non_existent_stop.sql' , :' query' , 500 );
8387\set query ` cat connections_by_route_name_and_time.sql`
84- SELECT bench(' connections_by_route_name_and_time.sql' , :' query' );
88+ SELECT bench(' connections_by_route_name_and_time.sql' , :' query' , 20 );
8589\set query ` cat connections_by_station_and_time.sql`
86- SELECT bench(' connections_by_station_and_time.sql' , :' query' , 40 );
90+ SELECT bench(' connections_by_station_and_time.sql' , :' query' , 50 );
8791\set query ` cat connections_by_station_and_time_seq_0.sql`
88- SELECT bench(' connections_by_station_and_time_seq_0.sql' , :' query' , 50 );
92+ SELECT bench(' connections_by_station_and_time_seq_0.sql' , :' query' , 300 );
8993\set query ` cat connections_by_stop.sql`
90- SELECT bench(' connections_by_stop.sql' , :' query' );
94+ SELECT bench(' connections_by_stop.sql' , :' query' , 40 );
9195\set query ` cat connections_by_stop_and_time.sql`
92- SELECT bench(' connections_by_stop_and_time.sql' , :' query' );
96+ SELECT bench(' connections_by_stop_and_time.sql' , :' query' , 200 );
9397\set query ` cat connections_by_time.sql`
94- SELECT bench(' connections_by_time.sql' , :' query' , 7 );
98+ SELECT bench(' connections_by_time.sql' , :' query' , 3 );
9599\set query ` cat connections_by_time_manual.sql`
96- SELECT bench(' connections_by_time_manual.sql' , :' query' , 7 );
100+ SELECT bench(' connections_by_time_manual.sql' , :' query' , 3 );
97101\set query ` cat connections_by_trip_and_date.sql`
98- SELECT bench(' connections_by_trip_and_date.sql' , :' query' );
102+ SELECT bench(' connections_by_trip_and_date.sql' , :' query' , 500 );
99103\set query ` cat stats_by_route_date.sql`
100- SELECT bench(' stats_by_route_date.sql' , :' query' , 10 );
104+ SELECT bench(' stats_by_route_date.sql' , :' query' , 5 );
101105\set query ` cat stops_by_distance.sql`
102- SELECT bench(' stops_by_distance.sql' , :' query' );
106+ SELECT bench(' stops_by_distance.sql' , :' query' , 170 );
103107
104108SELECT * FROM _benchmark;
105109
0 commit comments