Re: [HACKERS] pgbench more operators & functions - Mailing list pgsql-hackers

From Fabien COELHO
Subject Re: [HACKERS] pgbench more operators & functions
Date
Msg-id alpine.DEB.2.20.1704201915210.7266@lancre
Whole thread Raw
In response to Re: [HACKERS] pgbench more operators & functions  (Fabien COELHO <coelho@cri.ensmp.fr>)
Responses Re: [HACKERS] pgbench more operators & functions  (Pavel Stehule <pavel.stehule@gmail.com>)
List pgsql-hackers
> Here is a v9 which includes some more cleanup, hopefully in the expected 
> direction which is to make pgbench expressions behave as SQL 
> expressions, and I hope taking into account all other feedback as well.
>
>
> CONTEXT
>
> Pgbench has been given an expression parser (878fdcb8) which allows to use 
> full expressions instead of doing one-at-a-time operations. This parser has 
> been extended with functions (7e137f84) & double type (86c43f4e). The first 
> batch of functions was essentially a poc about how to add new functions with 
> various requirements. Pgbench default "tpcb-like" test takes advantage of 
> these additions to reduce the number of lines it needs.
>
>
> MOTIVATION
>
> This patch aims at providing actually useful functions for benchmarking. The 
> functions and operators provided here are usual basic operations. They are 
> not chosen randomly, but are simply taken from existing benchmarks:
>
> In TPC-B 2.0.0 section 5.3.5 and TPC-C 5.11 section 2.5.1.2, the selection of 
> accounts uses a test (if ...), logical conditions (AND, OR) and comparisons 
> (<, =, >=, >).
>
> In TPC-C 5.11 section 2.1.6, a bitwise or (|) is used to skew a distribution 
> based on two uniform distributions.
>
> In TPC-C 5.11 section 5.2.5.4, a log function is used to determine "think 
> time", which can be truncated (i.e. "least" function, already in pgbench).
>
>
> CONTENTS
>
> The attached patch provides a consistent set of functions and operators based 
> on the above examples, with operator precedence taken from postgres SQL 
> parser:
>
> - "boolean" type support is added, because it has been requested that pgbench 
> should be as close as SQL expressions as possible. This induced some renaming 
> as some functions & struct fields where named "num" because they where 
> expecting an int or a double, but a boolean is not really a numeral.
>
> - SQL comparisons (= <> < > <= >=) plus pg SQL "!=", which result in a 
> boolean.
>
> - SQL logical operators (and or not) on booleans.
>
> - SQL bitwise operators taken from pg: | & # << >> ~.
>
> - mod SQL function as a synonymous for %.
>
> - ln and exp SQL functions.
>
> - SQL CASE/END conditional structure.
>
> The patch also includes documentation and additional tap tests.
> A test script is also provided.
>
> This version is strict about typing, mimicking postgres behavior. For 
> instance, using an int as a boolean results in a error. It is easy to make it 
> more tolerant to types, which was the previous behavior before it was 
> suggested to follow SQL behavior.
>
> Together with another submitted patch about retrieving query results, the 
> added capabilities allow to implement strictly conforming TPC-B transactions.

Given the time scale to get things through, or eventually not,
here is an update I was initially planning to submit later on.

On top of new functions, operators and the boolean type provided in v9:

  - improve boolean conversion for "yes", "on" and other variants,
    in line with pg general behavior.

  - add support for NULL, including IS test variants.

  - conditions are quite permissive i.e. non zero numericals are true
    on a test.

  - TAP tests are removed.
    I think there must be a TAP test, but the pgbench testing
    infrastructure is currently not very adequate.
    I've submitted an independent patch to enhance it:

        https://commitfest.postgresql.org/14/1118/

    that I suggest should be considered first. Once there is such
    convenient infra, I would update this patch to take advantage of it.

  - it cleans up a few things in the implementation

-- 
Fabien.
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Attachment

pgsql-hackers by date:

Previous
From: Fabien COELHO
Date:
Subject: Re: [HACKERS] pgbench tap tests & minor fixes
Next
From: Tom Lane
Date:
Subject: Re: [HACKERS] Fwd: WIP Patch: Precalculate stable functions