postgresql的并行查询

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
上一篇:PostgreSQL建立索引时,如何避免写数据锁定


下一篇:E - Σ[k=0..10^100]floor(X/10^k)