postgresql的并行查询
- 9.6版本之前不支持并行查询,9.6+版本支持并行查询有限,10+版本增强并行查询功能
- 10版本暂不支持非btree索引类型的并行索引扫描
并行查询的相关参数
##设置系统支持的最大后台进程数,备库需要大于或等于主库的
max_worker_processes
##设置系统支持的并行查询进程数,默认8
max_parallel_workers
##设置允许启用的并行进程的进程数
max_parallel_workers_per_gather
##设置优化器启动并行进程的成本
parallel_setup_cost
##设置优化器通过并行进程处理一行数据的成本
parallel_tuple_cost
##设置开启并行的条件之一,表占用空间小于此值将不会开启并行
min_parallel_table_scan_size
##设置开启并行的条件之一,实际上并行索引扫描不会扫描所有所有数据块,只扫描索引相关的数据块
min_parallel_index_scan_size
##强制开启并行,一般作为测试目的,生产环境不建议使用,一般不建议开启
force_parallel_mode
三个配置参数关系通常:
max_worker_processes > max_parallel_workers > max_parallel_workers_per_gather
1.并行顺序扫描
seq scan …
parallel seq scan on …
2.并行索引扫描
index scan using …
parallel index scan …
3.并行index-only扫描
index only scan using …
parallel index only scan …
4.并行bitmap heap扫描
当sql的where条件中出现or时很有可能出现bitmap index扫描
bitmap index scan
5.多表联级
- nested loop多表关联,实际上是一个嵌套循环
- merge join多表关联,先对表进行排序后再进行关联字段匹配
- hash join多表关联,当关联字段没有索引情况下两表关联通常会进行hash join