]> granicus.if.org Git - postgresql/commitdiff
pgbench: Correct for bias in --rate schedule generation.
authorNoah Misch <noah@leadboat.com>
Thu, 26 Sep 2013 03:09:50 +0000 (23:09 -0400)
committerNoah Misch <noah@leadboat.com>
Thu, 26 Sep 2013 03:11:34 +0000 (23:11 -0400)
Previous code gave a mean delay 0.44% below target.  This change also
has the effect of increasing the maximum possible delay.

Fabien COELHO

contrib/pgbench/pgbench.c

index 06dd7093fa588c9aafc607a4a63dca60f8dcd237..66ae48e4a7b9c1cbcd046d9cc102811a672acafd 100644 (file)
@@ -929,13 +929,17 @@ top:
                 * that the series of delays will approximate a Poisson distribution
                 * centered on the throttle_delay time.
                  *
-                 * 1000 implies a 6.9 (-log(1/1000)) to 0.0 (log 1.0) delay multiplier.
+                * 10000 implies a 9.2 (-log(1/10000)) to 0.0 (log 1) delay multiplier,
+                * and results in a 0.055 % target underestimation bias:
+                *
+                * SELECT 1.0/AVG(-LN(i/10000.0)) FROM generate_series(1,10000) AS i;
+                * = 1.000552717032611116335474
                 *
                 * If transactions are too slow or a given wait is shorter than
                 * a transaction, the next transaction will start right away.
                 */
-               int64 wait = (int64)
-                       throttle_delay * -log(getrand(thread, 1, 1000)/1000.0);
+               int64 wait = (int64) (throttle_delay *
+                       1.00055271703 * -log(getrand(thread, 1, 10000)/10000.0));
 
                thread->throttle_trigger += wait;