diff options
author | Tatsuo Ishii <ishii@postgresql.org> | 2005-12-04 01:22:42 +0000 |
---|---|---|
committer | Tatsuo Ishii <ishii@postgresql.org> | 2005-12-04 01:22:42 +0000 |
commit | 3824460544e223b3e0d529e3a6313a533a7c5726 (patch) | |
tree | afe01ecfba1de94b1132d361908858c955b7fde9 | |
parent | a9bdac055c7be8100b7d5dd881a469466717234c (diff) | |
download | postgresql-3824460544e223b3e0d529e3a6313a533a7c5726.tar.gz postgresql-3824460544e223b3e0d529e3a6313a533a7c5726.zip |
Two fixes from Tom Lan. See the posting "[PATCHES] A couple of
proposed pgbench changes" on 2005/11/29 for more details.
The change at line 490 updates doCustom's local variable "commands"
after selecting a new file (command sequence). I think that the
existing coding will cause the thing to use the first command of the
old sequence in the remainder of the routine, which would be a bug.
I have not tried to set up a test case to prove it, though.
The other two changes cause doCustom to loop after processing a
meta-command. This might be a bit controversial, but as the code
is currently written, each meta-command "costs" one cycle of the
outer select() loop. Thus, for example, with the default TPC-B script,
once a backend returns "COMMIT" it will not receive a new command
until four cycles of issuing commands to other backends have elapsed.
(You can see this very easily by strace'ing pgbench under load.)
-rw-r--r-- | contrib/pgbench/pgbench.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/contrib/pgbench/pgbench.c b/contrib/pgbench/pgbench.c index 8e999630330..ae8c4fe5e41 100644 --- a/contrib/pgbench/pgbench.c +++ b/contrib/pgbench/pgbench.c @@ -1,5 +1,5 @@ /* - * $PostgreSQL: pgsql/contrib/pgbench/pgbench.c,v 1.45.2.2 2005/11/23 13:23:34 ishii Exp $ + * $PostgreSQL: pgsql/contrib/pgbench/pgbench.c,v 1.45.2.3 2005/12/04 01:22:42 ishii Exp $ * * pgbench: a simple benchmark program for PostgreSQL * written by Tatsuo Ishii @@ -411,6 +411,7 @@ doCustom(CState * state, int n, int debug) CState *st = &state[n]; Command **commands; +top: commands = sql_files[st->use_file]; if (st->listen) @@ -489,6 +490,7 @@ doCustom(CState * state, int n, int debug) { st->state = 0; st->use_file = getrand(0, num_files - 1); + commands = sql_files[st->use_file]; } } @@ -572,6 +574,8 @@ doCustom(CState * state, int n, int debug) free(val); st->listen = 1; } + + goto top; } } |