diff --git a/doc/src/sgml/ref/pgbench.sgml b/doc/src/sgml/ref/pgbench.sgml index c5399ff952..1d13897030 100644 --- a/doc/src/sgml/ref/pgbench.sgml +++ b/doc/src/sgml/ref/pgbench.sgml @@ -698,6 +698,7 @@ pgbench options dbname Each script may be given a relative weight specified after a @ so as to change its drawing probability. The default weight is 1. + Scripts with a weight of 0 are ignored. @@ -1259,17 +1260,17 @@ tps = 618.764555 (including connections establishing) tps = 622.977698 (excluding connections establishing) script statistics: - statement latencies in milliseconds: - 0.002522 \set aid random(1, 100000 * :scale) - 0.005459 \set bid random(1, 1 * :scale) - 0.002348 \set tid random(1, 10 * :scale) - 0.001078 \set delta random(-5000, 5000) - 0.326152 BEGIN; - 0.603376 UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid; - 0.454643 SELECT abalance FROM pgbench_accounts WHERE aid = :aid; - 5.528491 UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid; - 7.335435 UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid; - 0.371851 INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP); - 1.212976 END; + 0.002 \set aid random(1, 100000 * :scale) + 0.005 \set bid random(1, 1 * :scale) + 0.002 \set tid random(1, 10 * :scale) + 0.001 \set delta random(-5000, 5000) + 0.326 BEGIN; + 0.603 UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid; + 0.454 SELECT abalance FROM pgbench_accounts WHERE aid = :aid; + 5.528 UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid; + 7.335 UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid; + 0.371 INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP); + 1.212 END; diff --git a/src/bin/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c index 90e538cedc..52d1223910 100644 --- a/src/bin/pgbench/pgbench.c +++ b/src/bin/pgbench/pgbench.c @@ -3054,10 +3054,10 @@ parseScriptWeight(const char *option, char **script) fprintf(stderr, "invalid weight specification: %s\n", sep); exit(1); } - if (wtmp > INT_MAX || wtmp <= 0) + if (wtmp > INT_MAX || wtmp < 0) { fprintf(stderr, - "weight specification out of range (1 .. %u): " INT64_FORMAT "\n", + "weight specification out of range (0 .. %u): " INT64_FORMAT "\n", INT_MAX, (int64) wtmp); exit(1); } @@ -3181,10 +3181,11 @@ printResults(TState *threads, StatsData *total, instr_time total_time, { if (num_scripts > 1) printf("SQL script %d: %s\n" - " - weight = %d\n" + " - weight = %d (targets %.1f%% of total)\n" " - " INT64_FORMAT " transactions (%.1f%% of total, tps = %f)\n", i + 1, sql_script[i].desc, sql_script[i].weight, + 100.0 * sql_script[i].weight / total_weight, sql_script[i].stats.cnt, 100.0 * sql_script[i].stats.cnt / total->cnt, sql_script[i].stats.cnt / time_include); @@ -3628,6 +3629,12 @@ main(int argc, char **argv) /* cannot overflow: weight is 32b, total_weight 64b */ total_weight += sql_script[i].weight; + if (total_weight == 0 && !is_init_mode) + { + fprintf(stderr, "total script weight must not be zero\n"); + exit(1); + } + /* show per script stats if several scripts are used */ if (num_scripts > 1) per_script_stats = true;