OSDN Git Service

Refactor hint application mechamism
[pghintplan/pg_hint_plan.git] / sql / ut-W.sql
1 LOAD 'pg_hint_plan';
2 ALTER SYSTEM SET session_preload_libraries TO 'pg_hint_plan';
3 SET pg_hint_plan.enable_hint TO on;
4 SET pg_hint_plan.debug_print TO on;
5 SET client_min_messages TO LOG;
6
7
8 CREATE TABLE s1.tl (a int);
9 INSERT INTO s1.tl (SELECT a FROM generate_series(0, 100000) a);
10
11 -- Queries on ordinary tables
12 EXPLAIN (COSTS false) SELECT * FROM s1.t1;
13
14 SET parallel_setup_cost to 0;
15 SET parallel_tuple_cost to 0;
16 SET min_parallel_relation_size to 0;
17 /*+Parallel(t1 10)*/
18 EXPLAIN (COSTS false) SELECT * FROM s1.t1;
19
20 /*+Parallel(t1 10 soft)*/
21 EXPLAIN (COSTS false) SELECT * FROM s1.t1;
22 SET parallel_setup_cost to DEFAULT;
23 SET parallel_tuple_cost to DEFAULT;
24 SET min_parallel_relation_size to DEFAULT;
25
26 /*+Parallel(t1 10 hard)*/
27 EXPLAIN (COSTS false) SELECT * FROM s1.t1;
28
29 -- Queries on inheritance tables
30 SET parallel_setup_cost to 0;
31 SET parallel_tuple_cost to 0;
32 SET min_parallel_relation_size to 0;
33 /*+Parallel(p1 10)*/
34 EXPLAIN (COSTS false) SELECT * FROM p1;
35 SET parallel_setup_cost to DEFAULT;
36 SET parallel_tuple_cost to DEFAULT;
37 SET min_parallel_relation_size to DEFAULT;
38
39 /*+Parallel(p1 10 hard)*/
40 EXPLAIN (COSTS false) SELECT * FROM p1;
41
42 -- hinting on children don't work
43 /*+Parallel(p1_c1 10 hard)*/
44 EXPLAIN (COSTS false) SELECT * FROM p1;
45
46
47 -- Joins
48 EXPLAIN (COSTS false) SELECT * FROM p1_c1 join p2_c1 on p1_c1.id = p2_c1.id;
49
50 /*+Parallel(p1_c1 10 hard)*/
51 EXPLAIN (COSTS false) SELECT * FROM p1_c1 join p2_c1 on p1_c1.id = p2_c1.id;
52
53 /*+Parallel(p2_c1 10 hard)*/
54 EXPLAIN (COSTS false) SELECT * FROM p1_c1 join p2_c1 on p1_c1.id = p2_c1.id;
55
56 /*+Parallel(p1_c1 10 hard) Parallel(p2_c1 10 hard)*/
57 EXPLAIN (COSTS false) SELECT * FROM p1_c1 join p2_c1 on p1_c1.id = p2_c1.id;
58
59
60 -- Joins on inheritance tables
61 SET parallel_setup_cost to 0;
62 SET parallel_tuple_cost to 0;
63 SET min_parallel_relation_size to 0;
64 /*+Parallel(p1 10)*/
65 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
66 SET parallel_setup_cost to DEFAULT;
67 SET parallel_tuple_cost to DEFAULT;
68 SET min_parallel_relation_size to DEFAULT;
69
70 /*+Parallel(p2 10 hard)*/
71 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
72
73 /*+Parallel(p2 10 hard) Parallel(p1 5 hard) */
74 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
75
76
77 -- Mixture with a scan hint
78 -- p1 can be parallel
79 /*+Parallel(p1 10 hard) IndexScan(p2) */
80 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
81
82 -- seqscan doesn't harm parallelism
83 /*+Parallel(p1 10 hard) SeqScan(p1) */
84 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
85
86 -- parallelism is not available for the case
87 /*+Parallel(p1 10 hard) IndexScan(p1) */
88 EXPLAIN (COSTS false) SELECT * FROM p1 join p2 on p1.id = p2.id;
89
90
91 -- Parallel on UNION
92 EXPLAIN (COSTS false) SELECT id FROM p1 UNION ALL SELECT id FROM p2;
93
94 -- some of the scans are not parallel, so this cannot be parallel
95 SET parallel_setup_cost to 0;
96 SET parallel_tuple_cost to 0;
97 SET min_parallel_relation_size to 0;
98 /*+Parallel(p1 10) */
99 EXPLAIN (COSTS false) SELECT id FROM p1 UNION ALL SELECT id FROM p2;
100
101 -- all children are parallel, so this can be parallel
102 /*+Parallel(p1 10) Parallel(p2 10) */
103 EXPLAIN (COSTS false) SELECT id FROM p1 UNION ALL SELECT id FROM p2;
104 SET parallel_setup_cost to DEFAULT;
105 SET parallel_tuple_cost to DEFAULT;
106 SET min_parallel_relation_size to DEFAULT;
107
108 /*+Parallel(p1 10 hard)Parallel(p2 10 hard) */
109 EXPLAIN (COSTS false) SELECT id FROM p1 UNION ALL SELECT id FROM p2;
110
111
112 -- Negative hint
113 SET max_parallel_workers_per_gather to 5;
114 SET parallel_setup_cost to 0;
115 SET parallel_tuple_cost to 0;
116 SET min_parallel_relation_size to 0;
117 EXPLAIN (COSTS false) SELECT * FROM p1;
118
119 /*+Parallel(p1 0 hard)*/
120 EXPLAIN (COSTS false) SELECT * FROM p1;
121
122 ALTER SYSTEM SET session_preload_libraries TO DEFAULT;
123 SELECT pg_reload_conf();