#!/bin/bash dbname=postgres rows=1000000 secs=10 ntests=3 psql -c "create extension if not exists pg_prewarm;" $dbname psql -c "drop table if exists part_test;" $dbname psql -c "create table part_test (a int not null);" $dbname psql -c "insert into part_test select g.s from generate_series(1,$rows) g(s);" $dbname psql -c "vacuum freeze analyze part_test;" $dbname psql -c "select pg_prewarm('part_test');" $dbname psql -c "alter system set work_mem = '256MB';" $dbname psql -c "alter system set jit = 0;" $dbname psql -c "select pg_reload_conf();" $dbname for c in 1 10 100 1000 10000 100000 1000000 do echo "SELECT a,count(*) OVER (PARTITION BY a / $c) FROM part_test OFFSET $rows" > bench.sql echo "Testing with $(($rows / $c)) partitions" for i in $(seq 1 $ntests) do pgbench -n -f bench.sql -M prepared -T $secs $dbname | grep latency done done