Configuring Query Planner
1. Setting random_page_cost
random_page_cost = 1.1 # SSD (default 4.0 for HDD)
2. Setting seq_page_cost
seq_page_cost = 1.0 # baseline
3. Setting cpu_tuple_cost
cpu_tuple_cost = 0.01 # per-row processing cost
4. Setting cpu_index_tuple_cost
cpu_index_tuple_cost = 0.005
5. Setting cpu_operator_cost
cpu_operator_cost = 0.0025
| Parameter | Lower → Planner Prefers |
|---|---|
| random_page_cost | Index scans |
| seq_page_cost | Seq scans |
| cpu_* | Index/hash over many-row processing |
6. Setting effective_io_concurrency
effective_io_concurrency = 200 # SSD; helps Bitmap Heap Scan prefetch
7. Setting enable_seqscan
SET enable_seqscan = off; -- debugging only; never in production GUC
8. Setting enable_indexscan
SET enable_indexscan = on;
9. Setting enable_bitmapscan
SET enable_bitmapscan = on;
10. Setting enable_hashjoin
SET enable_hashjoin = on;
11. Setting enable_mergejoin
SET enable_mergejoin = on;
12. Setting enable_nestloop
SET enable_nestloop = on;
Warning: enable_* are diagnostic toggles. Disabling them adds a huge cost penalty; planner may still pick a Seq Scan if it's the only option.
13. Setting enable_parallel_append, enable_parallel_hash
enable_parallel_append = on
enable_parallel_hash = on
14. Setting max_parallel_workers_per_gather
max_parallel_workers_per_gather = 4
max_parallel_workers = 8
max_parallel_maintenance_workers = 4
15. Setting jit
jit = on
jit_above_cost = 100000
jit_inline_above_cost = 500000
jit_optimize_above_cost = 500000
Note: JIT helps OLAP queries with millions of rows + complex expressions. Often a net loss on OLTP.