From: | Ruben Buchatskiy <ruben(at)ispras(dot)ru> |
---|---|
To: | pgsql-hackers(at)postgresql(dot)org, amit(dot)kapila16(at)gmail(dot)com |
Subject: | Non-deterministic behavior with floating point in parallel mode |
Date: | 2017-02-02 13:27:16 |
Message-ID: | CAFRJ5K0+ZZaUz0-ihX-aCj1h42H=s-CLWO+2Fb6nHCvXx19Diw@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Hi hackers,
We have found that in parallel mode result of queries is non-deterministic
when the types of the attributes in table are double precision
(floating-point).
Our example is based on TPC-H, but some NUMERIC columns type was changed to
DOUBLE PRECISION;
When running without parallelism
tpch=# set max_parallel_workers_per_gather to 0;
SET
tpch=# select sum(l_extendedprice) from lineitem where l_shipdate <= date
'1998-12-01' - interval '116 days';
sum
------------------
448157055361.319
(1 row)
output is always the same.
But in parallel mode
tpch=# set max_parallel_workers_per_gather to 1;
SET
tpch=# select sum(l_extendedprice) from lineitem where l_shipdate <= date
'1998-12-01' - interval '116 days';
sum
------------------
448157055361.341
(1 row)
tpch=# select sum(l_extendedprice) from lineitem where l_shipdate <= date
'1998-12-01' - interval '116 days';
sum
-----------------
448157055361.348
(1 row)
result differs between runs.
That is because floating-point addition is not necessarily associative.
That is, (a + b) + c is not necessarily equal to a + (b + c).
In parallel mode, the order in which the attribute values are added
(summed) changes between runs, which leads to non-deterministic results.
Is this desirable behavior?
--
*Best Regards,**Ruben.* <ruben(at)ispras(dot)ru>
ISP RAS.
From | Date | Subject | |
---|---|---|---|
Next Message | Alexey Bashtanov | 2017-02-02 13:27:51 | patch: optimize information_schema.constraint_column_usage |
Previous Message | Magnus Hagander | 2017-02-02 13:13:46 | Re: Enabling replication connections by default in pg_hba.conf |