Skip to content

Commit 5321ae0

Browse files
committed
benchmark: tweak iterations ⚡
to strike a balance between precision and runtime.
1 parent df5674c commit 5321ae0

File tree

1 file changed

+26
-22
lines changed

1 file changed

+26
-22
lines changed

benchmark/index.sql

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -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)
1919
RETURNS void
2020
AS $$
2121
DECLARE
22+
_warmup_iterations INTEGER;
2223
_start TIMESTAMPTZ;
2324
_end TIMESTAMPTZ;
2425
_delta DOUBLE PRECISION;
@@ -28,7 +29,8 @@ BEGIN
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

@@ -60,46 +62,48 @@ END
6062
$$
6163
LANGUAGE 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

104108
SELECT * FROM _benchmark;
105109

0 commit comments

Comments
 (0)