Re: extend pgbench expressions with functions

From: Michael Paquier <michael(dot)paquier(at)gmail(dot)com>
To: Fabien COELHO <coelho(at)cri(dot)ensmp(dot)fr>
Cc: Heikki Linnakangas <hlinnaka(at)iki(dot)fi>, PostgreSQL Developers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: extend pgbench expressions with functions
Date: 2015-08-26 07:43:08
Message-ID: CAB7nPqSALrkug5ONAwVmZT41x1__6AEh7es13Cg+guDOjkK7qg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Sun, Jul 26, 2015 at 6:37 PM, Fabien COELHO <coelho(at)cri(dot)ensmp(dot)fr> wrote:
>
> Hello Heikki,
>
>>> As soon as we add more functions, the way they are documented needs to be
>>> reworked too; we'll need to add a table in the manual to list them.
>>
>>
>> Here is a v8 with "abs", "min", "max", "random", "gaussian" et
>> "exponential".
>>
>> [...]
>>
>> There is no real doc, WIP...
>
>
> Here is a v9 with a doc. The implicit typing of expressions is improved.
>
> I also added two debug functions which allow to show intermediate integer
> (idebug) or double (ddebug).
>
> \set i idebug(random(1, 10))
>
> will print the random value and assign it to i.
>
>
> I updated the defaut scripts, which seems to speed up meta command
> evaluations. The initial version does less than 2 million evals per second:
>
> sh> cat before.sql
> \set naccounts 100000 * :scale
> \setrandom aid 1 :naccounts
>
> sh> ./pgbench -T 3 -P 1 -f before.sql
> [...]
> tps = 1899004.793098 (excluding connections establishing)
>
>
> The updated version does more than 3 million evals per second:
>
> sh> cat after.sql
> \set aid random(1, 100000 * :scale)
>
> sh> ./pgbench -T 3 -P 1 -f after.sql
> [...]
> tps = 3143168.813690 (excluding connections establishing)
>
>
> Suggestion:
>
> A possibility would be to remove altogether the \setrandom stuff as the
> functionality is available through \set, maybe with an error message to
> advise about using \set with one of the random functions. That would remove
> about 200 ugly locs...
>
> Another option would be to translate the setrandom stuff into a \set
> expression, that would maybe save 100 locs for the eval, but keep and expand
> a little the "manual" parser part.

I have moved this patch to the next CF.
--
Michael

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Michael Paquier 2015-08-26 07:44:06 Re: Performance improvement for joins where outer side is unique
Previous Message Michael Paquier 2015-08-26 07:37:37 Re: src/test/ssl broken on HEAD