diff --git a/.github/workflows/postgresql-16-src-meson-perf.yml b/.github/workflows/postgresql-16-src-meson-perf.yml index 56f9949a..d7181491 100644 --- a/.github/workflows/postgresql-16-src-meson-perf.yml +++ b/.github/workflows/postgresql-16-src-meson-perf.yml @@ -93,6 +93,7 @@ jobs: bin/psql sbtest2 <<< "SELECT pg_tde_add_key_provider_file('file-vault','/tmp/pg_tde_test_keyring.per');" bin/psql sbtest2 <<< "SELECT pg_tde_set_principal_key('test-db-principal-key','file-vault');" cp -r ../src/contrib/pg_tde/sysbench . + cp -r ../src/contrib/pg_tde/perf . working-directory: inst - name: Run baseline performance tests @@ -109,6 +110,12 @@ jobs: sysbench --db-driver=pgsql --threads=1 sysbench/oltp_read_only.lua --tables=1 --table-size=10000 --pgsql-db=sbtest2 run | tee perf_tde working-directory: inst + - name: Run seq read performance tests + run: | + export PATH=../bin/:$PATH + ./seq_read.sh | tee seq_read + working-directory: inst/perf + - name: Print results run: | NORM_Q=$(cat perf_norm | grep 'total number of events' | cut -d ':' -f 2 | sed 's/ //g') @@ -119,6 +126,7 @@ jobs: echo "Normal queries: $(cat perf_norm | grep 'total number of events' | cut -d ':' -f 2 | sed 's/ //g')" >> pr_perf_results echo "TDE queries: $(cat perf_tde | grep 'total number of events' | cut -d ':' -f 2 | sed 's/ //g')" >> pr_perf_results echo "Percentage: $(($TDE_Q*100/$NORM_Q))%" >> pr_perf_results + cat perf/seq_read >> pr_perf_results PERF_RESULT=$(cat pr_perf_results) echo "PERF_RESULT<> $GITHUB_ENV echo "$PERF_RESULT" >> $GITHUB_ENV diff --git a/perf/pp-2019.csv.xz b/perf/pp-2019.csv.xz new file mode 100644 index 00000000..224b589a Binary files /dev/null and b/perf/pp-2019.csv.xz differ diff --git a/perf/seq_read.sh b/perf/seq_read.sh new file mode 100755 index 00000000..f398fd50 --- /dev/null +++ b/perf/seq_read.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash +cd "$(dirname "$0")" + +xz -d pp2019.csv.xz +cp pp-2019.csv /tmp/ +createdb seq_read_test +psql seq_read_test < seq_read_prepare.sql > /dev/null +echo "Sequential scan read times" +echo "==========================" +echo -n "HEAP: " +psql seq_read_test < seq_read_run_heap.sql | grep "Execution" | tail -n 10 | cut -d " " -f 4 | paste -sd+ | bc +echo -n "TDE: " +psql seq_read_test < seq_read_run_tde.sql | grep "Execution" | tail -n 10 | cut -d " " -f 4 | paste -sd+ | bc +echo -n "TDE_BASIC: " +psql seq_read_test < seq_read_run_tde_basic.sql | grep "Execution" | tail -n 10 | cut -d " " -f 4 | paste -sd+ | bc diff --git a/perf/seq_read_prepare.sql b/perf/seq_read_prepare.sql new file mode 100644 index 00000000..c9df732c --- /dev/null +++ b/perf/seq_read_prepare.sql @@ -0,0 +1,65 @@ +CREATE EXTENSION pg_tde; + +SELECT pg_tde_add_key_provider_file('file-store','/tmp/pg_tde_test_keyring.per'); +SELECT pg_tde_set_principal_key('test-db-principal-key','file-store'); + + +CREATE TABLE land_registry_price_paid_uk( + transaction uuid, + price numeric, + transfer_date date, + postcode text, + property_type char(1), + newly_built boolean, + duration char(1), + paon text, + saon text, + street text, + locality text, + city text, + district text, + county text, + ppd_category_type char(1), + record_status char(1)); + +CREATE TABLE land_registry_price_paid_uk_tde( + transaction uuid, + price numeric, + transfer_date date, + postcode text, + property_type char(1), + newly_built boolean, + duration char(1), + paon text, + saon text, + street text, + locality text, + city text, + district text, + county text, + ppd_category_type char(1), + record_status char(1)) USING tde_heap; + +CREATE TABLE land_registry_price_paid_uk_tde_basic( + transaction uuid, + price numeric, + transfer_date date, + postcode text, + property_type char(1), + newly_built boolean, + duration char(1), + paon text, + saon text, + street text, + locality text, + city text, + district text, + county text, + ppd_category_type char(1), + record_status char(1)) USING tde_heap_basic; + +COPY land_registry_price_paid_uk FROM '/tmp/pp-2019.csv' with (format csv, encoding 'win1252', header false, null '', quote '"', force_null (postcode, saon, paon, street, locality, city, district)); + +COPY land_registry_price_paid_uk_tde FROM '/tmp/pp-2019.csv' with (format csv, encoding 'win1252', header false, null '', quote '"', force_null (postcode, saon, paon, street, locality, city, district)); + +COPY land_registry_price_paid_uk_tde_basic FROM '/tmp/pp-2019.csv' with (format csv, encoding 'win1252', header false, null '', quote '"', force_null (postcode, saon, paon, street, locality, city, district)); diff --git a/perf/seq_read_run_heap.sql b/perf/seq_read_run_heap.sql new file mode 100644 index 00000000..1ad94e73 --- /dev/null +++ b/perf/seq_read_run_heap.sql @@ -0,0 +1,11 @@ +EXPLAIN ANALYZE SELECT * FROM land_registry_price_paid_uk; +EXPLAIN ANALYZE SELECT * FROM land_registry_price_paid_uk; +EXPLAIN ANALYZE SELECT * FROM land_registry_price_paid_uk; +EXPLAIN ANALYZE SELECT * FROM land_registry_price_paid_uk; +EXPLAIN ANALYZE SELECT * FROM land_registry_price_paid_uk; +EXPLAIN ANALYZE SELECT * FROM land_registry_price_paid_uk; +EXPLAIN ANALYZE SELECT * FROM land_registry_price_paid_uk; +EXPLAIN ANALYZE SELECT * FROM land_registry_price_paid_uk; +EXPLAIN ANALYZE SELECT * FROM land_registry_price_paid_uk; +EXPLAIN ANALYZE SELECT * FROM land_registry_price_paid_uk; +EXPLAIN ANALYZE SELECT * FROM land_registry_price_paid_uk; diff --git a/perf/seq_read_run_tde.sql b/perf/seq_read_run_tde.sql new file mode 100644 index 00000000..13c86b18 --- /dev/null +++ b/perf/seq_read_run_tde.sql @@ -0,0 +1,11 @@ +EXPLAIN ANALYZE SELECT * FROM land_registry_price_paid_uk_tde; +EXPLAIN ANALYZE SELECT * FROM land_registry_price_paid_uk_tde; +EXPLAIN ANALYZE SELECT * FROM land_registry_price_paid_uk_tde; +EXPLAIN ANALYZE SELECT * FROM land_registry_price_paid_uk_tde; +EXPLAIN ANALYZE SELECT * FROM land_registry_price_paid_uk_tde; +EXPLAIN ANALYZE SELECT * FROM land_registry_price_paid_uk_tde; +EXPLAIN ANALYZE SELECT * FROM land_registry_price_paid_uk_tde; +EXPLAIN ANALYZE SELECT * FROM land_registry_price_paid_uk_tde; +EXPLAIN ANALYZE SELECT * FROM land_registry_price_paid_uk_tde; +EXPLAIN ANALYZE SELECT * FROM land_registry_price_paid_uk_tde; +EXPLAIN ANALYZE SELECT * FROM land_registry_price_paid_uk_tde; diff --git a/perf/seq_read_run_tde_basic.sql b/perf/seq_read_run_tde_basic.sql new file mode 100644 index 00000000..4a90b41a --- /dev/null +++ b/perf/seq_read_run_tde_basic.sql @@ -0,0 +1,11 @@ +EXPLAIN ANALYZE SELECT * FROM land_registry_price_paid_uk_tde_basic; +EXPLAIN ANALYZE SELECT * FROM land_registry_price_paid_uk_tde_basic; +EXPLAIN ANALYZE SELECT * FROM land_registry_price_paid_uk_tde_basic; +EXPLAIN ANALYZE SELECT * FROM land_registry_price_paid_uk_tde_basic; +EXPLAIN ANALYZE SELECT * FROM land_registry_price_paid_uk_tde_basic; +EXPLAIN ANALYZE SELECT * FROM land_registry_price_paid_uk_tde_basic; +EXPLAIN ANALYZE SELECT * FROM land_registry_price_paid_uk_tde_basic; +EXPLAIN ANALYZE SELECT * FROM land_registry_price_paid_uk_tde_basic; +EXPLAIN ANALYZE SELECT * FROM land_registry_price_paid_uk_tde_basic; +EXPLAIN ANALYZE SELECT * FROM land_registry_price_paid_uk_tde_basic; +EXPLAIN ANALYZE SELECT * FROM land_registry_price_paid_uk_tde_basic;