#!/bin/bash

set -e

psql -c "show huge_pages;" postgres
psql -c "show shared_buffers;" postgres
psql -c "create extension if not exists pg_prewarm" postgres

psql -c "alter system set max_parallel_workers = 0;" postgres > /dev/null
psql -c "alter system set work_mem = '4GB';" postgres > /dev/null
psql -c "alter system set wip_radix_sort = '$1';" postgres

psql -c "select pg_reload_conf();" postgres > /dev/null

psql -c "create table if not exists abcdefgh (a int, b int, c int, d int, e int, f int, g int, h int);" postgres

for exp in 4 5 6 7
do
	psql -c "truncate table abcdefgh;" postgres > /dev/null
	psql -d postgres > /dev/null  <<EOF
insert into abcdefgh
select a,b,c,d,e,f,g,h from
generate_series(1,$exp) a,
generate_series(1,$exp) b,
generate_series(1,$exp) c,
generate_series(1,$exp) d,
generate_series(1,$exp) e,
generate_series(1,$exp) f,
generate_series(1,$exp) g,
generate_series(1,$exp) h;
EOF
	psql -c "vacuum freeze abcdefgh;" postgres > /dev/null
	psql -c "select pg_prewarm('abcdefgh');" postgres > /dev/null
	echo "select * from abcdefgh order by a,b,c,d,e,f,g,h;" > bench.sql
	echo -n "$exp ^ 8: "
	pgbench -n -f bench.sql -T 30 -M prepared postgres | grep latency
done
