如何设置postgresql select中的worker数量?

Mic*_*čka 3 postgresql

正如标题所述,我可以运行以下查询:

EXPLAIN ANALYZE SELECT * FROM accounts WHERE screen_name='realDonaldTrump';
Run Code Online (Sandbox Code Playgroud)

并得到输出:

Gather  (cost=1000.00..87090.59 rows=1 width=122) (actual time=369.168..383.632 rows=1 loops=1)
   Workers Planned: 2
   Workers Launched: 2   
->  Parallel Seq Scan on accounts  (cost=0.00..86090.49 rows=1 width=122) (actual time=312.741..326.849 rows=0 loops=3)
        Filter: ((screen_name)::text = 'realDonaldTrump'::text)
        Rows Removed by Filter: 1156140 
Planning Time: 0.065 ms 
Execution Time: 383.649 ms
Run Code Online (Sandbox Code Playgroud)

现在我的问题是如何转换此查询以使用更多或更少的工作人员?在网上我找到了一些参数,例如max_parallel_workers,但我无法将它们合并到查询中。我正在从 pycharm -> postgresql 控制台运行此查询。

编辑:从评论运行查询后,这是输出:

Gather  (cost=1000.00..87090.59 rows=1 width=122) (actual time=348.717..403.839 rows=1 loops=1)
  Workers Planned: 2
  Workers Launched: 2
  ->  Parallel Seq Scan on accounts  (cost=0.00..86090.49 rows=1 width=122) (actual time=311.207..324.566 rows=0 loops=3)
        Filter: ((screen_name)::text = 'realDonaldTrump'::text)
        Rows Removed by Filter: 1156140
Planning Time: 0.563 ms
Execution Time: 403.856 ms
Run Code Online (Sandbox Code Playgroud)

编辑2:在搞乱了 postgresql.conf 文件并更改max_parallel_workers_per_gather和 的值max_parallel_workers然后重新启动 postgres 后,没有任何变化。直到后来我运行了这个查询之后:

SET max_parallel_workers_per_gather = 4;

初始 sql 查询是否与请求的 4 个工作线程一起运行。

Lau*_*lbe 6

你可以增加max_parallel_workers_per_gather,或者你可以

ALTER TABLE accounts SET (parallel_workers = 6);
Run Code Online (Sandbox Code Playgroud)