pgsql: pgbench: Prepare commands in pipelines in advance

From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: pgbench: Prepare commands in pipelines in advance
Date: 2023-02-21 10:15:20
Message-ID: E1pUPg7-002FWD-Fk@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

pgbench: Prepare commands in pipelines in advance

Failing to do so results in an error when a pgbench script tries to
start a serializable transaction inside a pipeline, because by the time
BEGIN ISOLATION LEVEL SERIALIZABLE is executed, we're already in a
transaction that has acquired a snapshot, so the server rightfully
complains.

We can work around that by preparing all commands in the pipeline before
actually starting the pipeline. This changes the existing code in two
aspects: first, we now prepare each command individually at the point
where that command is about to be executed; previously, we would prepare
all commands in a script as soon as the first command of that script
would be executed. It's hard to see that this would make much of a
difference (particularly since it only affects the first time to execute
each script in a client), but I didn't actually try to measure it.

Secondly, we no longer use PQsendPrepare() in pipeline mode, but only
PQprepare. There's no specific reason for this change other than no
longer needing to do differently in pipeline mode. (Previously we had
no choice, because in pipeline mode PQprepare could not be used.)

Backpatch to 14, where pgbench got support for pipeline mode.

Reported-by: Yugo NAGATA <nagata(at)sraoss(dot)co(dot)jp>
Discussion: https://postgr.es/m/20210716153013.fc53b1c780b06fccc07a7f0d@sraoss.co.jp

Branch
------
REL_14_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/663e50e8321192f30559a7dd68a912c43a44dcbb

Modified Files
--------------
src/bin/pgbench/pgbench.c | 162 ++++++++++++++++++---------
src/bin/pgbench/t/001_pgbench_with_server.pl | 20 ++++
2 files changed, 130 insertions(+), 52 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Michael Paquier 2023-02-21 11:02:41 pgsql: Fix handling of escape sequences in postgres_fdw.application_nam
Previous Message John Naylor 2023-02-21 04:59:03 Re: pgsql: Add assert checking to pg_leftmost_one_pos32() and friends