web-dev-qa-db-fra.com

Comment puis-je désactiver les requêtes parallèles à PostgreSQL?

Je veux comparer certaines choses à PostgreSQL. Lorsque je fais cela, je désactive normalement certaines des fonctionnalités que la base de données utilise actuellement, juste pour ma session, pour voir quel est le deuxième meilleur plan.

Bien que définition max_parallel_works = 0, Je reçois toujours un plan parallèle.

                                                         QUERY PLAN                                                         
----------------------------------------------------------------------------------------------------------------------------
 Gather  (cost=1000.00..120892.01 rows=1000 width=15) (actual time=0.444..4781.539 rows=666667 loops=1)
   Workers Planned: 2
   Workers Launched: 0
   ->  Parallel Seq Scan on foo  (cost=0.00..119792.01 rows=417 width=15) (actual time=0.102..4711.530 rows=666667 loops=1)
         Filter: (lower(x) ~~ '%999.com'::text)
         Rows Removed by Filter: 9333333
 Planning time: 0.124 ms
 Execution time: 4801.491 ms
(8 rows)

Je sais que ça dit Workers Launched: 0. Mais j'aimerais que cela ressemble à un plan préparatoire où le plan lui-même est non même prévu d'être parallèle. Comment puis-je accomplir cela?

4
Evan Carroll

Des docs,

max_parallel_workers_per_gather (integer) Définit le nombre maximum de travailleurs pouvant être démarrés par un seul rassemblement ou collecter des nœuds de fusion. Les travailleurs parallèles sont tirés du pool de processus établis par max_worker_processes, limité par max_parallel_workers. Notez que le nombre demandé de travailleurs peut ne pas être disponible en temps d'exécution. Si cela se produit, le plan fonctionnera avec moins de travailleurs que prévu, ce qui peut être inefficace. La valeur par défaut est 2. définir cette valeur à 0 désactive l'exécution de la requête parallèle.

Afin de désactiver l'utilisation de la planification de la requête parallèle,

SET max_parallel_workers_per_gather = 0;

Vous pouvez voir cela ici, même requête,

                                                  QUERY PLAN                                                  
--------------------------------------------------------------------------------------------------------------
 Seq Scan on foo  (cost=0.00..207292.03 rows=1000 width=15) (actual time=0.082..4715.721 rows=666667 loops=1)
   Filter: (lower(x) ~~ '%999.com'::text)
   Rows Removed by Filter: 9333333
 Planning time: 0.083 ms
 Execution time: 4736.202 ms
7
Evan Carroll