Reduce test time for disk-based Hash Aggregation.
authorJeff Davis <jdavis@postgresql.org>
Tue, 24 Mar 2020 01:55:12 +0000 (18:55 -0700)
committerJeff Davis <jdavis@postgresql.org>
Tue, 24 Mar 2020 02:03:49 +0000 (19:03 -0700)
Discussion: https://postgr.es/m/23196.1584943506@sss.pgh.pa.us

src/test/regress/expected/aggregates.out
src/test/regress/expected/groupingsets.out
src/test/regress/sql/aggregates.sql
src/test/regress/sql/groupingsets.sql

index 3259a22516e2e1c9e61f2c1394163bf438138874..14cdcfcca6e51d3f056ae76240c995e250a32fa8 100644 (file)
@@ -2453,22 +2453,22 @@ set work_mem='64kB';
 set enable_hashagg = false;
 set jit_above_cost = 0;
 explain (costs off)
-select g%100000 as c1, sum(g::numeric) as c2, count(*) as c3
-  from generate_series(0, 199999) g
-  group by g%100000;
+select g%10000 as c1, sum(g::numeric) as c2, count(*) as c3
+  from generate_series(0, 19999) g
+  group by g%10000;
                    QUERY PLAN                   
 ------------------------------------------------
  GroupAggregate
-   Group Key: ((g % 100000))
+   Group Key: ((g % 10000))
    ->  Sort
-         Sort Key: ((g % 100000))
+         Sort Key: ((g % 10000))
          ->  Function Scan on generate_series g
 (5 rows)
 
 create table agg_group_1 as
-select g%100000 as c1, sum(g::numeric) as c2, count(*) as c3
-  from generate_series(0, 199999) g
-  group by g%100000;
+select g%10000 as c1, sum(g::numeric) as c2, count(*) as c3
+  from generate_series(0, 19999) g
+  group by g%10000;
 create table agg_group_2 as
 select * from
   (values (100), (300), (500)) as r(a),
@@ -2493,20 +2493,20 @@ set enable_hashagg = true;
 set enable_sort = false;
 set jit_above_cost = 0;
 explain (costs off)
-select g%100000 as c1, sum(g::numeric) as c2, count(*) as c3
-  from generate_series(0, 199999) g
-  group by g%100000;
+select g%10000 as c1, sum(g::numeric) as c2, count(*) as c3
+  from generate_series(0, 19999) g
+  group by g%10000;
                 QUERY PLAN                
 ------------------------------------------
  HashAggregate
-   Group Key: (g % 100000)
+   Group Key: (g % 10000)
    ->  Function Scan on generate_series g
 (3 rows)
 
 create table agg_hash_1 as
-select g%100000 as c1, sum(g::numeric) as c2, count(*) as c3
-  from generate_series(0, 199999) g
-  group by g%100000;
+select g%10000 as c1, sum(g::numeric) as c2, count(*) as c3
+  from generate_series(0, 19999) g
+  group by g%10000;
 create table agg_hash_2 as
 select * from
   (values (100), (300), (500)) as r(a),
index dbe5140b55801f5ce5d930d6e42fe219ab88885a..05ff204f02c673ab3b4e66c1b778e084988150a6 100644 (file)
@@ -1644,10 +1644,10 @@ SET work_mem='64kB';
 set enable_hashagg = false;
 set jit_above_cost = 0;
 explain (costs off)
-select g1000, g100, g10, sum(g::numeric), count(*), max(g::text) from
+select g100, g10, sum(g::numeric), count(*), max(g::text) from
   (select g%1000 as g1000, g%100 as g100, g%10 as g10, g
-   from generate_series(0,199999) g) s
-group by cube (g1000,g100,g10);
+   from generate_series(0,1999) g) s
+group by cube (g1000, g100,g10);
                           QUERY PLAN                           
 ---------------------------------------------------------------
  GroupAggregate
@@ -1667,31 +1667,18 @@ group by cube (g1000,g100,g10);
 (14 rows)
 
 create table gs_group_1 as
-select g1000, g100, g10, sum(g::numeric), count(*), max(g::text) from
+select g100, g10, sum(g::numeric), count(*), max(g::text) from
   (select g%1000 as g1000, g%100 as g100, g%10 as g10, g
-   from generate_series(0,199999) g) s
-group by cube (g1000,g100,g10);
-set jit_above_cost to default;
-create table gs_group_2 as
-select g1000, g100, g10, sum(g::numeric), count(*), max(g::text) from
-  (select g/20 as g1000, g/200 as g100, g/2000 as g10, g
-   from generate_series(0,19999) g) s
-group by cube (g1000,g100,g10);
-create table gs_group_3 as
-select g100, g10, array_agg(g) as a, count(*) as c, max(g::text) as m from
-  (select g/200 as g100, g/2000 as g10, g
-   from generate_series(0,19999) g) s
-group by grouping sets (g100,g10);
+   from generate_series(0,1999) g) s
+group by cube (g1000, g100,g10);
 -- Produce results with hash aggregation.
 set enable_hashagg = true;
 set enable_sort = false;
-set work_mem='64kB';
-set jit_above_cost = 0;
 explain (costs off)
-select g1000, g100, g10, sum(g::numeric), count(*), max(g::text) from
+select g100, g10, sum(g::numeric), count(*), max(g::text) from
   (select g%1000 as g1000, g%100 as g100, g%10 as g10, g
-   from generate_series(0,199999) g) s
-group by cube (g1000,g100,g10);
+   from generate_series(0,1999) g) s
+group by cube (g1000, g100,g10);
                     QUERY PLAN                     
 ---------------------------------------------------
  MixedAggregate
@@ -1707,52 +1694,21 @@ group by cube (g1000,g100,g10);
 (10 rows)
 
 create table gs_hash_1 as
-select g1000, g100, g10, sum(g::numeric), count(*), max(g::text) from
+select g100, g10, sum(g::numeric), count(*), max(g::text) from
   (select g%1000 as g1000, g%100 as g100, g%10 as g10, g
-   from generate_series(0,199999) g) s
-group by cube (g1000,g100,g10);
-set jit_above_cost to default;
-create table gs_hash_2 as
-select g1000, g100, g10, sum(g::numeric), count(*), max(g::text) from
-  (select g/20 as g1000, g/200 as g100, g/2000 as g10, g
-   from generate_series(0,19999) g) s
-group by cube (g1000,g100,g10);
-create table gs_hash_3 as
-select g100, g10, array_agg(g) as a, count(*) as c, max(g::text) as m from
-  (select g/200 as g100, g/2000 as g10, g
-   from generate_series(0,19999) g) s
-group by grouping sets (g100,g10);
+   from generate_series(0,1999) g) s
+group by cube (g1000, g100,g10);
 set enable_sort = true;
 set work_mem to default;
 -- Compare results
 (select * from gs_hash_1 except select * from gs_group_1)
   union all
 (select * from gs_group_1 except select * from gs_hash_1);
- g1000 | g100 | g10 | sum | count | max 
--------+------+-----+-----+-------+-----
-(0 rows)
-
-(select * from gs_hash_2 except select * from gs_group_2)
-  union all
-(select * from gs_group_2 except select * from gs_hash_2);
- g1000 | g100 | g10 | sum | count | max 
--------+------+-----+-----+-------+-----
-(0 rows)
-
-(select g100,g10,unnest(a),c,m from gs_hash_3 except
-  select g100,g10,unnest(a),c,m from gs_group_3)
-    union all
-(select g100,g10,unnest(a),c,m from gs_group_3 except
-  select g100,g10,unnest(a),c,m from gs_hash_3);
- g100 | g10 | unnest | c | m 
-------+-----+--------+---+---
+ g100 | g10 | sum | count | max 
+------+-----+-----+-------+-----
 (0 rows)
 
 drop table gs_group_1;
-drop table gs_group_2;
-drop table gs_group_3;
 drop table gs_hash_1;
-drop table gs_hash_2;
-drop table gs_hash_3;
 SET enable_groupingsets_hash_disk TO DEFAULT;
 -- end
index 5da6f4152bea8c5a81e4ff538fb037a91cd58a0d..9480abd577e734041b5dceaccd05f45d11282a48 100644 (file)
@@ -1066,14 +1066,14 @@ set enable_hashagg = false;
 set jit_above_cost = 0;
 
 explain (costs off)
-select g%100000 as c1, sum(g::numeric) as c2, count(*) as c3
-  from generate_series(0, 199999) g
-  group by g%100000;
+select g%10000 as c1, sum(g::numeric) as c2, count(*) as c3
+  from generate_series(0, 19999) g
+  group by g%10000;
 
 create table agg_group_1 as
-select g%100000 as c1, sum(g::numeric) as c2, count(*) as c3
-  from generate_series(0, 199999) g
-  group by g%100000;
+select g%10000 as c1, sum(g::numeric) as c2, count(*) as c3
+  from generate_series(0, 19999) g
+  group by g%10000;
 
 create table agg_group_2 as
 select * from
@@ -1106,14 +1106,14 @@ set enable_sort = false;
 set jit_above_cost = 0;
 
 explain (costs off)
-select g%100000 as c1, sum(g::numeric) as c2, count(*) as c3
-  from generate_series(0, 199999) g
-  group by g%100000;
+select g%10000 as c1, sum(g::numeric) as c2, count(*) as c3
+  from generate_series(0, 19999) g
+  group by g%10000;
 
 create table agg_hash_1 as
-select g%100000 as c1, sum(g::numeric) as c2, count(*) as c3
-  from generate_series(0, 199999) g
-  group by g%100000;
+select g%10000 as c1, sum(g::numeric) as c2, count(*) as c3
+  from generate_series(0, 19999) g
+  group by g%10000;
 
 create table agg_hash_2 as
 select * from
index 478f49ecab59a2b81b3238d3b1c6f9ce6d0bc4d0..77e196798ace300631e055eefb0b8c21c8b5cdae 100644 (file)
@@ -453,68 +453,37 @@ SET work_mem='64kB';
 -- Produce results with sorting.
 
 set enable_hashagg = false;
-
 set jit_above_cost = 0;
 
 explain (costs off)
-select g1000, g100, g10, sum(g::numeric), count(*), max(g::text) from
+select g100, g10, sum(g::numeric), count(*), max(g::text) from
   (select g%1000 as g1000, g%100 as g100, g%10 as g10, g
-   from generate_series(0,199999) g) s
-group by cube (g1000,g100,g10);
+   from generate_series(0,1999) g) s
+group by cube (g1000, g100,g10);
 
 create table gs_group_1 as
-select g1000, g100, g10, sum(g::numeric), count(*), max(g::text) from
+select g100, g10, sum(g::numeric), count(*), max(g::text) from
   (select g%1000 as g1000, g%100 as g100, g%10 as g10, g
-   from generate_series(0,199999) g) s
-group by cube (g1000,g100,g10);
-
-set jit_above_cost to default;
-
-create table gs_group_2 as
-select g1000, g100, g10, sum(g::numeric), count(*), max(g::text) from
-  (select g/20 as g1000, g/200 as g100, g/2000 as g10, g
-   from generate_series(0,19999) g) s
-group by cube (g1000,g100,g10);
-
-create table gs_group_3 as
-select g100, g10, array_agg(g) as a, count(*) as c, max(g::text) as m from
-  (select g/200 as g100, g/2000 as g10, g
-   from generate_series(0,19999) g) s
-group by grouping sets (g100,g10);
+   from generate_series(0,1999) g) s
+group by cube (g1000, g100,g10);
 
 -- Produce results with hash aggregation.
 
 set enable_hashagg = true;
 set enable_sort = false;
-set work_mem='64kB';
-
-set jit_above_cost = 0;
 
 explain (costs off)
-select g1000, g100, g10, sum(g::numeric), count(*), max(g::text) from
+select g100, g10, sum(g::numeric), count(*), max(g::text) from
   (select g%1000 as g1000, g%100 as g100, g%10 as g10, g
-   from generate_series(0,199999) g) s
-group by cube (g1000,g100,g10);
+   from generate_series(0,1999) g) s
+group by cube (g1000, g100,g10);
 
 create table gs_hash_1 as
-select g1000, g100, g10, sum(g::numeric), count(*), max(g::text) from
+select g100, g10, sum(g::numeric), count(*), max(g::text) from
   (select g%1000 as g1000, g%100 as g100, g%10 as g10, g
-   from generate_series(0,199999) g) s
-group by cube (g1000,g100,g10);
+   from generate_series(0,1999) g) s
+group by cube (g1000, g100,g10);
 
-set jit_above_cost to default;
-
-create table gs_hash_2 as
-select g1000, g100, g10, sum(g::numeric), count(*), max(g::text) from
-  (select g/20 as g1000, g/200 as g100, g/2000 as g10, g
-   from generate_series(0,19999) g) s
-group by cube (g1000,g100,g10);
-
-create table gs_hash_3 as
-select g100, g10, array_agg(g) as a, count(*) as c, max(g::text) as m from
-  (select g/200 as g100, g/2000 as g10, g
-   from generate_series(0,19999) g) s
-group by grouping sets (g100,g10);
 
 set enable_sort = true;
 set work_mem to default;
@@ -525,22 +494,8 @@ set work_mem to default;
   union all
 (select * from gs_group_1 except select * from gs_hash_1);
 
-(select * from gs_hash_2 except select * from gs_group_2)
-  union all
-(select * from gs_group_2 except select * from gs_hash_2);
-
-(select g100,g10,unnest(a),c,m from gs_hash_3 except
-  select g100,g10,unnest(a),c,m from gs_group_3)
-    union all
-(select g100,g10,unnest(a),c,m from gs_group_3 except
-  select g100,g10,unnest(a),c,m from gs_hash_3);
-
 drop table gs_group_1;
-drop table gs_group_2;
-drop table gs_group_3;
 drop table gs_hash_1;
-drop table gs_hash_2;
-drop table gs_hash_3;
 
 SET enable_groupingsets_hash_disk TO DEFAULT;