OSDN Git Service

Fix parallel hint error handling.
authorKyotaro Horiguchi <horiguchi.kyotaro@lab.ntt.co.jp>
Mon, 13 Feb 2017 07:52:45 +0000 (16:52 +0900)
committerKyotaro Horiguchi <horiguchi.kyotaro@lab.ntt.co.jp>
Tue, 21 Feb 2017 00:11:44 +0000 (09:11 +0900)
Some kind of error of a parallel hint resulted confusing log
output. Addition to that, due to improper assumption of .conf file,
ordinary setup of max_worker_processes caused failure of ut-W. Fixed
them.

expected/ut-W.out
pg_hint_plan.c
sql/ut-W.sql

index e7496a5..20c1650 100644 (file)
@@ -16,11 +16,11 @@ SET parallel_setup_cost to 0;
 SET parallel_tuple_cost to 0;
 SET min_parallel_relation_size to 0;
 SET max_parallel_workers_per_gather to DEFAULT;
-/*+Parallel(t1 10)*/
+/*+Parallel(t1 8)*/
 EXPLAIN (COSTS false) SELECT * FROM s1.t1;
 LOG:  pg_hint_plan:
 used hint:
-Parallel(t1 10 soft)
+Parallel(t1 8 soft)
 not used hint:
 duplication hint:
 error hint:
@@ -32,11 +32,11 @@ error hint:
    ->  Parallel Seq Scan on t1
 (3 rows)
 
-/*+Parallel(t1 10 soft)*/
+/*+Parallel(t1 8 soft)*/
 EXPLAIN (COSTS false) SELECT * FROM s1.t1;
 LOG:  pg_hint_plan:
 used hint:
-Parallel(t1 10 soft)
+Parallel(t1 8 soft)
 not used hint:
 duplication hint:
 error hint:
@@ -48,11 +48,11 @@ error hint:
    ->  Parallel Seq Scan on t1
 (3 rows)
 
-/*+Parallel(t1 10 hard)*/
+/*+Parallel(t1 8 hard)*/
 EXPLAIN (COSTS false) SELECT * FROM s1.t1;
 LOG:  pg_hint_plan:
 used hint:
-Parallel(t1 10 hard)
+Parallel(t1 8 hard)
 not used hint:
 duplication hint:
 error hint:
@@ -60,7 +60,7 @@ error hint:
           QUERY PLAN           
 -------------------------------
  Gather
-   Workers Planned: 10
+   Workers Planned: 8
    ->  Parallel Seq Scan on t1
 (3 rows)
 
@@ -68,11 +68,11 @@ error hint:
 SET parallel_setup_cost to 0;
 SET parallel_tuple_cost to 0;
 SET min_parallel_relation_size to 0;
-/*+Parallel(p1 10)*/
+/*+Parallel(p1 8)*/
 EXPLAIN (COSTS false) SELECT * FROM p1;
 LOG:  pg_hint_plan:
 used hint:
-Parallel(p1 10 soft)
+Parallel(p1 8 soft)
 not used hint:
 duplication hint:
 error hint:
@@ -96,11 +96,11 @@ error hint:
 SET parallel_setup_cost to DEFAULT;
 SET parallel_tuple_cost to DEFAULT;
 SET min_parallel_relation_size to DEFAULT;
-/*+Parallel(p1 10 hard)*/
+/*+Parallel(p1 8 hard)*/
 EXPLAIN (COSTS false) SELECT * FROM p1;
 LOG:  pg_hint_plan:
 used hint:
-Parallel(p1 10 hard)
+Parallel(p1 8 hard)
 not used hint:
 duplication hint:
 error hint:
@@ -108,7 +108,7 @@ error hint:
                 QUERY PLAN                 
 -------------------------------------------
  Gather
-   Workers Planned: 10
+   Workers Planned: 8
    ->  Append
          ->  Parallel Seq Scan on p1
          ->  Parallel Seq Scan on p1_c1
@@ -122,11 +122,11 @@ error hint:
 (12 rows)
 
 -- hinting on children makes the whole inheritance parallel
-/*+Parallel(p1_c1 10 hard)*/
+/*+Parallel(p1_c1 8 hard)*/
 EXPLAIN (COSTS false) SELECT * FROM p1;
 LOG:  pg_hint_plan:
 used hint:
-Parallel(p1_c1 10 hard)
+Parallel(p1_c1 8 hard)
 not used hint:
 duplication hint:
 error hint:
@@ -134,7 +134,7 @@ error hint:
                 QUERY PLAN                 
 -------------------------------------------
  Gather
-   Workers Planned: 10
+   Workers Planned: 8
    ->  Append
          ->  Parallel Seq Scan on p1
          ->  Parallel Seq Scan on p1_c1
@@ -158,11 +158,11 @@ EXPLAIN (COSTS false) SELECT * FROM p1_c1_c1 join p2_c1_c1 on p1_c1_c1.id = p2_c
          ->  Seq Scan on p2_c1_c1
 (5 rows)
 
-/*+Parallel(p1_c1_c1 10 hard)*/
+/*+Parallel(p1_c1_c1 8 hard)*/
 EXPLAIN (COSTS false) SELECT * FROM p1_c1_c1 join p2_c1_c1 on p1_c1_c1.id = p2_c1_c1.id;
 LOG:  pg_hint_plan:
 used hint:
-Parallel(p1_c1_c1 10 hard)
+Parallel(p1_c1_c1 8 hard)
 not used hint:
 duplication hint:
 error hint:
@@ -174,18 +174,18 @@ error hint:
    ->  Seq Scan on p2_c1_c1
    ->  Hash
          ->  Gather
-               Workers Planned: 10
+               Workers Planned: 8
                ->  Parallel Seq Scan on p1_c1_c1
 (7 rows)
 
 SET parallel_setup_cost to 0;
 SET parallel_tuple_cost to 0;
 SET min_parallel_relation_size to 0;
-/*+Parallel(p1_c1_c1 10 soft) Parallel(p2_c1_c1 0)*/
+/*+Parallel(p1_c1_c1 8 soft) Parallel(p2_c1_c1 0)*/
 EXPLAIN (COSTS false) SELECT * FROM p1_c1_c1 join p2_c1_c1 on p1_c1_c1.id = p2_c1_c1.id;
 LOG:  pg_hint_plan:
 used hint:
-Parallel(p1_c1_c1 10 soft)
+Parallel(p1_c1_c1 8 soft)
 Parallel(p2_c1_c1 0 soft)
 not used hint:
 duplication hint:
@@ -202,11 +202,11 @@ error hint:
                ->  Seq Scan on p2_c1_c1
 (7 rows)
 
-/*+Parallel(p1_c1_c1 10 hard) Parallel(p2_c1_c1 0)*/
+/*+Parallel(p1_c1_c1 8 hard) Parallel(p2_c1_c1 0)*/
 EXPLAIN (COSTS false) SELECT * FROM p1_c1_c1 join p2_c1_c1 on p1_c1_c1.id = p2_c1_c1.id;
 LOG:  pg_hint_plan:
 used hint:
-Parallel(p1_c1_c1 10 hard)
+Parallel(p1_c1_c1 8 hard)
 Parallel(p2_c1_c1 0 soft)
 not used hint:
 duplication hint:
@@ -215,7 +215,7 @@ error hint:
                    QUERY PLAN                   
 ------------------------------------------------
  Gather
-   Workers Planned: 10
+   Workers Planned: 8
    ->  Hash Join
          Hash Cond: (p1_c1_c1.id = p2_c1_c1.id)
          ->  Parallel Seq Scan on p1_c1_c1
@@ -223,12 +223,12 @@ error hint:
                ->  Seq Scan on p2_c1_c1
 (7 rows)
 
-/*+Parallel(p1_c1_c1 10 hard) Parallel(p2_c1_c1 10 hard)*/
+/*+Parallel(p1_c1_c1 8 hard) Parallel(p2_c1_c1 8 hard)*/
 EXPLAIN (COSTS false) SELECT * FROM p1_c1_c1 join p2_c1_c1 on p1_c1_c1.id = p2_c1_c1.id;
 LOG:  pg_hint_plan:
 used hint:
-Parallel(p1_c1_c1 10 hard)
-Parallel(p2_c1_c1 10 hard)
+Parallel(p1_c1_c1 8 hard)
+Parallel(p2_c1_c1 8 hard)
 not used hint:
 duplication hint:
 error hint:
@@ -238,11 +238,11 @@ error hint:
  Hash Join
    Hash Cond: (p1_c1_c1.id = p2_c1_c1.id)
    ->  Gather
-         Workers Planned: 10
+         Workers Planned: 8
          ->  Parallel Seq Scan on p1_c1_c1
    ->  Hash
          ->  Gather
-               Workers Planned: 10
+               Workers Planned: 8
                ->  Parallel Seq Scan on p2_c1_c1
 (9 rows)
 
@@ -250,11 +250,11 @@ error hint:
 SET parallel_setup_cost to 0;
 SET parallel_tuple_cost to 0;
 SET min_parallel_relation_size to 0;
-/*+Parallel(p1 10)*/
+/*+Parallel(p1 8)*/
 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
 LOG:  pg_hint_plan:
 used hint:
-Parallel(p1 10 soft)
+Parallel(p1 8 soft)
 not used hint:
 duplication hint:
 error hint:
@@ -290,11 +290,11 @@ error hint:
                      ->  Parallel Seq Scan on p2_c3_c2
 (27 rows)
 
-/*+Parallel(p1 10)Parallel(p2 0)*/
+/*+Parallel(p1 8)Parallel(p2 0)*/
 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
 LOG:  pg_hint_plan:
 used hint:
-Parallel(p1 10 soft)
+Parallel(p1 8 soft)
 Parallel(p2 0 soft)
 not used hint:
 duplication hint:
@@ -332,11 +332,11 @@ error hint:
 SET parallel_setup_cost to DEFAULT;
 SET parallel_tuple_cost to DEFAULT;
 SET min_parallel_relation_size to DEFAULT;
-/*+Parallel(p2 10 hard)*/
+/*+Parallel(p2 8 hard)*/
 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
 LOG:  pg_hint_plan:
 used hint:
-Parallel(p2 10 hard)
+Parallel(p2 8 hard)
 not used hint:
 duplication hint:
 error hint:
@@ -344,40 +344,40 @@ error hint:
                       QUERY PLAN                       
 -------------------------------------------------------
  Hash Join
-   Hash Cond: (p1.id = p2.id)
+   Hash Cond: (p2.id = p1.id)
    ->  Gather
-         Workers Planned: 1
+         Workers Planned: 8
          ->  Append
-               ->  Parallel Seq Scan on p1
-               ->  Parallel Seq Scan on p1_c1
-               ->  Parallel Seq Scan on p1_c2
-               ->  Parallel Seq Scan on p1_c3
-               ->  Parallel Seq Scan on p1_c4
-               ->  Parallel Seq Scan on p1_c1_c1
-               ->  Parallel Seq Scan on p1_c1_c2
-               ->  Parallel Seq Scan on p1_c3_c1
-               ->  Parallel Seq Scan on p1_c3_c2
+               ->  Parallel Seq Scan on p2
+               ->  Parallel Seq Scan on p2_c1
+               ->  Parallel Seq Scan on p2_c2
+               ->  Parallel Seq Scan on p2_c3
+               ->  Parallel Seq Scan on p2_c4
+               ->  Parallel Seq Scan on p2_c1_c1
+               ->  Parallel Seq Scan on p2_c1_c2
+               ->  Parallel Seq Scan on p2_c3_c1
+               ->  Parallel Seq Scan on p2_c3_c2
    ->  Hash
          ->  Gather
-               Workers Planned: 10
+               Workers Planned: 1
                ->  Append
-                     ->  Parallel Seq Scan on p2
-                     ->  Parallel Seq Scan on p2_c1
-                     ->  Parallel Seq Scan on p2_c2
-                     ->  Parallel Seq Scan on p2_c3
-                     ->  Parallel Seq Scan on p2_c4
-                     ->  Parallel Seq Scan on p2_c1_c1
-                     ->  Parallel Seq Scan on p2_c1_c2
-                     ->  Parallel Seq Scan on p2_c3_c1
-                     ->  Parallel Seq Scan on p2_c3_c2
+                     ->  Parallel Seq Scan on p1
+                     ->  Parallel Seq Scan on p1_c1
+                     ->  Parallel Seq Scan on p1_c2
+                     ->  Parallel Seq Scan on p1_c3
+                     ->  Parallel Seq Scan on p1_c4
+                     ->  Parallel Seq Scan on p1_c1_c1
+                     ->  Parallel Seq Scan on p1_c1_c2
+                     ->  Parallel Seq Scan on p1_c3_c1
+                     ->  Parallel Seq Scan on p1_c3_c2
 (27 rows)
 
-/*+Parallel(p2 10 hard) Parallel(p1 5 hard) */
+/*+Parallel(p2 8 hard) Parallel(p1 5 hard) */
 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
 LOG:  pg_hint_plan:
 used hint:
 Parallel(p1 5 hard)
-Parallel(p2 10 hard)
+Parallel(p2 8 hard)
 not used hint:
 duplication hint:
 error hint:
@@ -385,42 +385,42 @@ error hint:
                       QUERY PLAN                       
 -------------------------------------------------------
  Hash Join
-   Hash Cond: (p1.id = p2.id)
+   Hash Cond: (p2.id = p1.id)
    ->  Gather
-         Workers Planned: 5
+         Workers Planned: 8
          ->  Append
-               ->  Parallel Seq Scan on p1
-               ->  Parallel Seq Scan on p1_c1
-               ->  Parallel Seq Scan on p1_c2
-               ->  Parallel Seq Scan on p1_c3
-               ->  Parallel Seq Scan on p1_c4
-               ->  Parallel Seq Scan on p1_c1_c1
-               ->  Parallel Seq Scan on p1_c1_c2
-               ->  Parallel Seq Scan on p1_c3_c1
-               ->  Parallel Seq Scan on p1_c3_c2
+               ->  Parallel Seq Scan on p2
+               ->  Parallel Seq Scan on p2_c1
+               ->  Parallel Seq Scan on p2_c2
+               ->  Parallel Seq Scan on p2_c3
+               ->  Parallel Seq Scan on p2_c4
+               ->  Parallel Seq Scan on p2_c1_c1
+               ->  Parallel Seq Scan on p2_c1_c2
+               ->  Parallel Seq Scan on p2_c3_c1
+               ->  Parallel Seq Scan on p2_c3_c2
    ->  Hash
          ->  Gather
-               Workers Planned: 10
+               Workers Planned: 5
                ->  Append
-                     ->  Parallel Seq Scan on p2
-                     ->  Parallel Seq Scan on p2_c1
-                     ->  Parallel Seq Scan on p2_c2
-                     ->  Parallel Seq Scan on p2_c3
-                     ->  Parallel Seq Scan on p2_c4
-                     ->  Parallel Seq Scan on p2_c1_c1
-                     ->  Parallel Seq Scan on p2_c1_c2
-                     ->  Parallel Seq Scan on p2_c3_c1
-                     ->  Parallel Seq Scan on p2_c3_c2
+                     ->  Parallel Seq Scan on p1
+                     ->  Parallel Seq Scan on p1_c1
+                     ->  Parallel Seq Scan on p1_c2
+                     ->  Parallel Seq Scan on p1_c3
+                     ->  Parallel Seq Scan on p1_c4
+                     ->  Parallel Seq Scan on p1_c1_c1
+                     ->  Parallel Seq Scan on p1_c1_c2
+                     ->  Parallel Seq Scan on p1_c3_c1
+                     ->  Parallel Seq Scan on p1_c3_c2
 (27 rows)
 
 -- Mixture with a scan hint
 -- p1 can be parallel
-/*+Parallel(p1 10 hard) IndexScan(p2) */
+/*+Parallel(p1 8 hard) IndexScan(p2) */
 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
 LOG:  pg_hint_plan:
 used hint:
 IndexScan(p2)
-Parallel(p1 10 hard)
+Parallel(p1 8 hard)
 not used hint:
 duplication hint:
 error hint:
@@ -430,7 +430,7 @@ error hint:
  Hash Join
    Hash Cond: (p1.id = p2.id)
    ->  Gather
-         Workers Planned: 10
+         Workers Planned: 8
          ->  Append
                ->  Parallel Seq Scan on p1
                ->  Parallel Seq Scan on p1_c1
@@ -457,12 +457,12 @@ error hint:
 (27 rows)
 
 -- seqscan doesn't harm parallelism
-/*+Parallel(p1 10 hard) SeqScan(p1) */
+/*+Parallel(p1 8 hard) SeqScan(p1) */
 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
 LOG:  pg_hint_plan:
 used hint:
 SeqScan(p1)
-Parallel(p1 10 hard)
+Parallel(p1 8 hard)
 not used hint:
 duplication hint:
 error hint:
@@ -472,7 +472,7 @@ error hint:
  Hash Join
    Hash Cond: (p1.id = p2.id)
    ->  Gather
-         Workers Planned: 10
+         Workers Planned: 8
          ->  Append
                ->  Parallel Seq Scan on p1
                ->  Parallel Seq Scan on p1_c1
@@ -499,12 +499,12 @@ error hint:
 (27 rows)
 
 -- parallel overrides index scan
-/*+Parallel(p1 10 hard) IndexScan(p1) */
+/*+Parallel(p1 8 hard) IndexScan(p1) */
 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
 LOG:  pg_hint_plan:
 used hint:
 IndexScan(p1)
-Parallel(p1 10 hard)
+Parallel(p1 8 hard)
 not used hint:
 duplication hint:
 error hint:
@@ -514,7 +514,7 @@ error hint:
  Hash Join
    Hash Cond: (p1.id = p2.id)
    ->  Gather
-         Workers Planned: 10
+         Workers Planned: 8
          ->  Append
                ->  Parallel Seq Scan on p1
                ->  Parallel Seq Scan on p1_c1
@@ -607,11 +607,11 @@ SET parallel_setup_cost to 0;
 SET parallel_tuple_cost to 0;
 SET min_parallel_relation_size to 0;
 SET max_parallel_workers_per_gather to 0;
-/*+Parallel(p1 10) */
+/*+Parallel(p1 8) */
 EXPLAIN (COSTS false) SELECT id FROM p1 UNION ALL SELECT id FROM p2;
 LOG:  pg_hint_plan:
 used hint:
-Parallel(p1 10 soft)
+Parallel(p1 8 soft)
 not used hint:
 duplication hint:
 error hint:
@@ -680,7 +680,7 @@ error hint:
 SET parallel_setup_cost to DEFAULT;
 SET parallel_tuple_cost to DEFAULT;
 SET min_parallel_relation_size to DEFAULT;
-SET max_parallel_workers_per_gather to 10;
+SET max_parallel_workers_per_gather to 8;
 /*+Parallel(p1 5 hard)Parallel(p2 6 hard) */
 EXPLAIN (COSTS false) SELECT id FROM p1 UNION ALL SELECT id FROM p2;
 LOG:  pg_hint_plan:
@@ -721,11 +721,11 @@ SET parallel_setup_cost to 0;
 SET parallel_tuple_cost to 0;
 SET min_parallel_relation_size to 0;
 SET max_parallel_workers_per_gather to 3;
-/*+Parallel(p1 10 hard) */
+/*+Parallel(p1 8 hard) */
 EXPLAIN (COSTS false) SELECT * FROM p1 join t1 on p1.id = t1.id;
 LOG:  pg_hint_plan:
 used hint:
-Parallel(p1 10 hard)
+Parallel(p1 8 hard)
 not used hint:
 duplication hint:
 error hint:
@@ -739,7 +739,7 @@ error hint:
          ->  Parallel Seq Scan on t1
    ->  Hash
          ->  Gather
-               Workers Planned: 10
+               Workers Planned: 8
                ->  Append
                      ->  Parallel Seq Scan on p1
                      ->  Parallel Seq Scan on p1_c1
@@ -799,14 +799,14 @@ error hint:
 
 -- Errors
 /*+Parallel(p1 100x hard)Parallel(p1 -1000 hard)Parallel(p1 1000000 hard)
-   Parallel(p1 10 hoge)Parallel(p1)Parallel(p1 100 soft x)*/
+   Parallel(p1 8 hoge)Parallel(p1)Parallel(p1 100 soft x)*/
 EXPLAIN (COSTS false) SELECT id FROM p1 UNION ALL SELECT id FROM p2;
 INFO:  pg_hint_plan: hint syntax error at or near "100x"
 DETAIL:  number of workers must be a number: Parallel
 INFO:  pg_hint_plan: hint syntax error at or near "-1000"
 DETAIL:  number of workers must be positive: Parallel
 INFO:  pg_hint_plan: hint syntax error at or near "1000000"
-DETAIL:  number of workers = 1000000 is larger than max_worker_processes(100): Parallel
+DETAIL:  number of workers = 1000000 is larger than max_worker_processes(8): Parallel
 INFO:  pg_hint_plan: hint syntax error at or near "hoge"
 DETAIL:  enforcement must be soft or hard: Parallel
 INFO:  pg_hint_plan: hint syntax error at or near ")"
@@ -821,7 +821,7 @@ error hint:
 Parallel(p1 100x hard)
 Parallel(p1 -1000 hard)
 Parallel(p1 1000000 hard)
-Parallel(p1 10 hard)
+Parallel(p1 8 soft)
 Parallel()
 Parallel()
 
index 2db71a9..5d4bd18 100644 (file)
@@ -2367,20 +2367,16 @@ ParallelHintParse(ParallelHint *hint, HintState *hstate, Query *parse,
                        hint_ereport(hint->nworkers_str,
                                                 ("number of workers must be positive: %s",
                                                  hint->base.keyword));
-               if ( nworkers > max_worker_processes)
+               else if (nworkers > max_worker_processes)
                        hint_ereport(hint->nworkers_str,
                                                 ("number of workers = %d is larger than max_worker_processes(%d): %s",
                                                  nworkers, max_worker_processes, hint->base.keyword));
 
                hint->base.state = HINT_STATE_ERROR;
-               return str;
        }
 
        hint->nworkers = nworkers;
 
-       if (nworkers > max_hint_nworkers)
-               max_hint_nworkers = nworkers;
-
        /* optional third parameter is specified */
        if (length == 3)
        {
@@ -2393,12 +2389,15 @@ ParallelHintParse(ParallelHint *hint, HintState *hstate, Query *parse,
                                                 ("enforcement must be soft or hard: %s",
                                                         hint->base.keyword));
                        hint->base.state = HINT_STATE_ERROR;
-                       return str;
                }
        }
-       
+
        hint->force_parallel = force_parallel;
 
+       if (hint->base.state != HINT_STATE_ERROR &&
+               nworkers > max_hint_nworkers)
+               max_hint_nworkers = nworkers;
+
        return str;
 }
 
index e7166d5..1ff2704 100644 (file)
@@ -16,50 +16,50 @@ SET parallel_tuple_cost to 0;
 SET min_parallel_relation_size to 0;
 SET max_parallel_workers_per_gather to DEFAULT;
 
-/*+Parallel(t1 10)*/
+/*+Parallel(t1 8)*/
 EXPLAIN (COSTS false) SELECT * FROM s1.t1;
 
-/*+Parallel(t1 10 soft)*/
+/*+Parallel(t1 8 soft)*/
 EXPLAIN (COSTS false) SELECT * FROM s1.t1;
 
-/*+Parallel(t1 10 hard)*/
+/*+Parallel(t1 8 hard)*/
 EXPLAIN (COSTS false) SELECT * FROM s1.t1;
 
 -- Queries on inheritance tables
 SET parallel_setup_cost to 0;
 SET parallel_tuple_cost to 0;
 SET min_parallel_relation_size to 0;
-/*+Parallel(p1 10)*/
+/*+Parallel(p1 8)*/
 EXPLAIN (COSTS false) SELECT * FROM p1;
 SET parallel_setup_cost to DEFAULT;
 SET parallel_tuple_cost to DEFAULT;
 SET min_parallel_relation_size to DEFAULT;
 
-/*+Parallel(p1 10 hard)*/
+/*+Parallel(p1 8 hard)*/
 EXPLAIN (COSTS false) SELECT * FROM p1;
 
 -- hinting on children makes the whole inheritance parallel
-/*+Parallel(p1_c1 10 hard)*/
+/*+Parallel(p1_c1 8 hard)*/
 EXPLAIN (COSTS false) SELECT * FROM p1;
 
 
 -- Joins
 EXPLAIN (COSTS false) SELECT * FROM p1_c1_c1 join p2_c1_c1 on p1_c1_c1.id = p2_c1_c1.id;
 
-/*+Parallel(p1_c1_c1 10 hard)*/
+/*+Parallel(p1_c1_c1 8 hard)*/
 EXPLAIN (COSTS false) SELECT * FROM p1_c1_c1 join p2_c1_c1 on p1_c1_c1.id = p2_c1_c1.id;
 
 SET parallel_setup_cost to 0;
 SET parallel_tuple_cost to 0;
 SET min_parallel_relation_size to 0;
 
-/*+Parallel(p1_c1_c1 10 soft) Parallel(p2_c1_c1 0)*/
+/*+Parallel(p1_c1_c1 8 soft) Parallel(p2_c1_c1 0)*/
 EXPLAIN (COSTS false) SELECT * FROM p1_c1_c1 join p2_c1_c1 on p1_c1_c1.id = p2_c1_c1.id;
 
-/*+Parallel(p1_c1_c1 10 hard) Parallel(p2_c1_c1 0)*/
+/*+Parallel(p1_c1_c1 8 hard) Parallel(p2_c1_c1 0)*/
 EXPLAIN (COSTS false) SELECT * FROM p1_c1_c1 join p2_c1_c1 on p1_c1_c1.id = p2_c1_c1.id;
 
-/*+Parallel(p1_c1_c1 10 hard) Parallel(p2_c1_c1 10 hard)*/
+/*+Parallel(p1_c1_c1 8 hard) Parallel(p2_c1_c1 8 hard)*/
 EXPLAIN (COSTS false) SELECT * FROM p1_c1_c1 join p2_c1_c1 on p1_c1_c1.id = p2_c1_c1.id;
 
 
@@ -67,34 +67,34 @@ EXPLAIN (COSTS false) SELECT * FROM p1_c1_c1 join p2_c1_c1 on p1_c1_c1.id = p2_c
 SET parallel_setup_cost to 0;
 SET parallel_tuple_cost to 0;
 SET min_parallel_relation_size to 0;
-/*+Parallel(p1 10)*/
+/*+Parallel(p1 8)*/
 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
 
-/*+Parallel(p1 10)Parallel(p2 0)*/
+/*+Parallel(p1 8)Parallel(p2 0)*/
 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
 
 SET parallel_setup_cost to DEFAULT;
 SET parallel_tuple_cost to DEFAULT;
 SET min_parallel_relation_size to DEFAULT;
 
-/*+Parallel(p2 10 hard)*/
+/*+Parallel(p2 8 hard)*/
 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
 
-/*+Parallel(p2 10 hard) Parallel(p1 5 hard) */
+/*+Parallel(p2 8 hard) Parallel(p1 5 hard) */
 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
 
 
 -- Mixture with a scan hint
 -- p1 can be parallel
-/*+Parallel(p1 10 hard) IndexScan(p2) */
+/*+Parallel(p1 8 hard) IndexScan(p2) */
 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
 
 -- seqscan doesn't harm parallelism
-/*+Parallel(p1 10 hard) SeqScan(p1) */
+/*+Parallel(p1 8 hard) SeqScan(p1) */
 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
 
 -- parallel overrides index scan
-/*+Parallel(p1 10 hard) IndexScan(p1) */
+/*+Parallel(p1 8 hard) IndexScan(p1) */
 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
 /*+Parallel(p1 0 hard) IndexScan(p1) */
 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
@@ -109,7 +109,7 @@ SET parallel_tuple_cost to 0;
 SET min_parallel_relation_size to 0;
 SET max_parallel_workers_per_gather to 0;
 
-/*+Parallel(p1 10) */
+/*+Parallel(p1 8) */
 EXPLAIN (COSTS false) SELECT id FROM p1 UNION ALL SELECT id FROM p2;
 
 -- set hint also does
@@ -120,7 +120,7 @@ EXPLAIN (COSTS false) SELECT id FROM p1 UNION ALL SELECT id FROM p2;
 SET parallel_setup_cost to DEFAULT;
 SET parallel_tuple_cost to DEFAULT;
 SET min_parallel_relation_size to DEFAULT;
-SET max_parallel_workers_per_gather to 10;
+SET max_parallel_workers_per_gather to 8;
 /*+Parallel(p1 5 hard)Parallel(p2 6 hard) */
 EXPLAIN (COSTS false) SELECT id FROM p1 UNION ALL SELECT id FROM p2;
 
@@ -131,7 +131,7 @@ SET parallel_tuple_cost to 0;
 SET min_parallel_relation_size to 0;
 SET max_parallel_workers_per_gather to 3;
 
-/*+Parallel(p1 10 hard) */
+/*+Parallel(p1 8 hard) */
 EXPLAIN (COSTS false) SELECT * FROM p1 join t1 on p1.id = t1.id;
 
 -- Negative hint
@@ -146,7 +146,7 @@ EXPLAIN (COSTS false) SELECT * FROM p1;
 
 -- Errors
 /*+Parallel(p1 100x hard)Parallel(p1 -1000 hard)Parallel(p1 1000000 hard)
-   Parallel(p1 10 hoge)Parallel(p1)Parallel(p1 100 soft x)*/
+   Parallel(p1 8 hoge)Parallel(p1)Parallel(p1 100 soft x)*/
 EXPLAIN (COSTS false) SELECT id FROM p1 UNION ALL SELECT id FROM p2;
 
 ALTER SYSTEM SET session_preload_libraries TO DEFAULT;