You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
db=# SELECT no, ymd, MAX(val)
FROM maxtest
GROUP BY no, ymd LIMIT 3;
no | ymd | max
----+-----+--------------------------
4 | 3 | -1.7976931348623157e+308
4 | 1 | -1.7976931348623157e+308
1 | 7 | -1.7976931348623157e+308
期待する結果
PG-Stromオフ時には以下の結果となり、これが期待する値です。
db=# SET pg_strom.enabled=false;
db=# SELECT no, ymd, MAX(val)
FROM maxtest
GROUP BY no, ymd LIMIT 3;
no | ymd | max
----+-----+-----------
4 | 3 | 1.98625
4 | 1 | 2.033
1 | 7 | 2.0410625
実行計画
EXPLAIN ANALYZE
SELECT no, ymd, MAX(val)
FROM maxtest
GROUP BY no, ymd;
QUERY PLAN
---------------------------------------------------------------------------------------------------------------------------------
HashAggregate (cost=143.25..143.88 rows=50 width=14) (actual time=470.214..470.228 rows=50 loops=1)
Group Key: no, ymd
Batches: 1 Memory Usage: 24kB
-> Custom Scan (GpuPreAgg) on maxtest (cost=142.38..142.88 rows=50 width=38) (actual time=470.164..470.177 rows=50 loops=1)
GPU Projection: pgstrom.pmax(val), no, ymd
GPU-Direct SQL: enabled (N=1,GPU0-0; buffer=39, ntuples=7200)
Planning Time: 0.152 ms
Execution Time: 470.353 ms
再現データ作成方法
テーブル
-- DROP TABLE maxtest;
CREATE TABLE maxtest (
no varchar(10),
ymd integer,
val double precision);
DB_NAME=mydb
for no in {1..5};do
for ymd in {1..10};do
for h in {1..144};do
echo "INSERT INTO maxtest VALUES ($no, $ymd, $RANDOM/16000.0);";
done;
done;
done | psql -Upostgres ${DB_NAME}
Summary
PG-Strom有効時に、MAX()関数が正しい値を返しません。
実行計画で、HashAggregate が選択された時にのみ発生しているように見えます。
具体例
このようなデータ(7200件)に対して、
以下の集約関数を含むクエリを実行したところ、極小の負数(正しくない)が返ってきました。
期待する結果
PG-Stromオフ時には以下の結果となり、これが期待する値です。
実行計画
再現データ作成方法
テーブル
データ
以下のbashスクリプトにて 7200件のデータを生成します。
(DB_NAMEは環境に合わせて変更してください)
確認バージョン
The text was updated successfully, but these errors were encountered: