一、概述
当服务器有多核 cpu 时,PostgreSQL 会根据默认配置,在合适的条件下自动进行并行操作,除非主动关闭了相关并行参数。
二、并行相关参数
max_worker_processes:系统能够支持的后台进程的最大数量,默认是 8,并行工作者数据会受此参数限制。
max_parallel_workers:设置系统为并行操作所支持的工作者的最大数量,默认值为 8。
max_parallel_workers_per_gather:设置单个 Gather 或者 Gather Merge 节点能够开始的工作者的最大数量,默认值是 2,把这个值设置为 0 将会禁用并行查询执行。注意并行查询可能消耗比非并行查询更多的资源,因为每一个工作者进程时一个完全独立的进程,它对系统产生的影响大致和一个额外的用户会话相同。
max_parallel_maintenance_workers:维护性操作(建索引、除了 full 的 vacuum 操作)支持的最大并行数量,默认值是 2。
parallel_setup_cost:优化器启动并行进程的成本,默认为1000。
parallel_tuple_cost:优化器通过并行进程处理一行数据的成本,默认为0.1。
min_parallel_table_scan_size:扫描的数据量超过此值,优化器才会考虑启用并行,默认8M。
min_parallel_index_scan_size:扫描的索引数据量超过此值,优化器才会考虑启用并行,默认512k。
force_parallel_mode:强制使用并行查询,一般用于测试,默认off.
三、参数配置注意事项
- 采用上述默认值,优化器会在并行查询成本低时,自动选择并行查询。
- 自定义配置并行参数时,系统cpu数量 > max_worker_processes > max_parallel_workers > max_parallel_workers_per_gather > 0,max_parallel_workers_per_gather 为 0,禁用并行查询。
- 想让表更容易走并行查询,可适当调低 min_parallel_table_scan_size,min_parallel_index_scan_size 值。