PgBench's \setrandom could be better

From: David Rowley <dgrowleyml(at)gmail(dot)com>
To: PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: PgBench's \setrandom could be better
Date: 2014-11-15 22:51:13
Message-ID: CAApHDvrauQPgksQLV6vUtfKPkgtKsiCowAqU-3GuLBLpNJFLvw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi,

I've just been looking into the TPC-H benchmark with intention to put
together some scripts which can be run easily to output some run times for
each of the 22 queries.

I've not had a great deal of exposure to pgbench yet, but I had thought
that it might be able to help me run these queries with the randomly chosen
inputs that are described in the TPC-H spec.

From the spec under 2.4.6.3:

1. DATE is the first of January of a randomly selected year within [1993 ..
1997];
2. DISCOUNT is randomly selected within [0.02 .. 0.09];
3. QUANTITY is randomly selected within [24 .. 25].

With pgbench I can do:

\setrandom qty 24 25
then throw a :qty into the query and have pgbench replace that with either
24 or 25.

The problem is that this does not work for anything apart from integer
types.

I also can't seem to do anything with the date type. Perhaps it would be
nice to be able to do something like:

\setrandom date '1993-01-01' '1994-01-01' '1995-01-01' '1996-01-01'
'1997-01-01'

But this would be ambiguous if I wanted to choose either from either 10 or
20 as:

\setrandom var 10 20

would choose a random number between 10 and 20, not 10 or 20.

I would imagine that code could be added to allow the random to choose a
floating point number, if one or more of the inputs had a decimal point in
them, but I can't see around how to make it work with lists without
changing the syntax.

Perhaps [between] could become a optional keyword in there so that we could
do:

\setrandom var between 0 10

And for lists it could work like:

\setrandom var list 'a' 'b' 'c'

There should be no conflicts with the original syntax, as as far as I'm
aware only an integer number can follow the variable name.

I was planning on putting something together to help me with this, but I
thought I'd post here first so that I might actually end up with something
useful at the end of it.

So my questions are:

1. Would anyone else find this useful?
2. Is my proposed syntax ok? Can you think of anything better or more
flexible?

Regards

David Rowley

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Andrew Dunstan 2014-11-15 22:56:40 Re: controlling psql's use of the pager a bit more
Previous Message Simon Riggs 2014-11-15 22:11:29 Re: Log notice that checkpoint is to be written on shutdown