Aller au contenu | Aller au menu | Aller à la recherche

Coup d'oeil au Query Parallelism

Le query parallelism est une fonctionnalité intégrée dans PostgreSQL depuis la version 9.6 qui permet de diviser une requête complexe en plusieurs tâches parallèles qui sont exécutées simultanément. Cette fonctionnalité permet d'améliorer les performances en répartissant la charge de travail sur plusieurs cœurs de processeur.

Supposons que nous avons une table "orders" contenant des commandes passées par des clients, avec une colonne "total_amount" contenant le montant total de la commande. Nous pouvons utiliser la fonction d'agrégation "SUM" pour calculer la somme de tous les montants de commande :

SELECT SUM(total_amount)
   FROM orders;

Si la table contient des millions de lignes, le temps d'exécution peut être considérable. Cependant, si nous activons le query parallelism dans la configuration de PostgreSQL, la requête sera divisée en plusieurs tâches parallèles qui seront exécutées simultanément sur différents processeurs ou threads.

Pour activer le query parallelism dans PostgreSQL, nous devons définir la valeur du paramètre "max_parallel_workers_per_gather" dans le fichier postgresql.conf. Par exemple, si nous voulons utiliser jusqu'à 4 travailleurs parallèles, nous pouvons définir la valeur comme suit :

max_parallel_workers_per_gather = 4

Après avoir redémarré le serveur PostgreSQL, nous pouvons exécuter la même requête :

SELECT SUM(total_amount)
FROM orders;

Cette fois-ci, la requête sera divisée en plusieurs tâches parallèles qui seront exécutées simultanément sur différents processeurs ou threads, ce qui permettra d'obtenir des résultats beaucoup plus rapidement que si la requête avait été exécutée séquentiellement.

Depuis psql vous pouvez également au besoin, modifier la valeur du max_parallel_workers_per_gather via la commande :

SET max_parallel_workers_per_gather=6;

Ce changement ne sera en revanche pris en compte pour que la session en cours sur votre console psql, mais pas pour l'intégralité du serveur. Il faut impérativement passer par le fichier postgresql.conf et un reload de la configuration pour la prise en compte globale du réglage.

De nombreuses évolution ont été apportées au features du parallélisme sur les releases de PostgreSQL comme le support des parcours des index B-Tree, les merges des jointures peuvent s'appuyer également sur cette feature ou encore la création des index depuis la version 11, la version 14 apportant des optimisations incroyables.

Il est important de noter que le query parallelism ne peut pas être appliqué à toutes les requêtes et qu'il peut y avoir des coûts supplémentaires associés à la synchronisation des résultats des tâches parallèles. Cependant, dans de nombreux cas, l'utilisation du query parallelism peut grandement améliorer les performances des requêtes sur de grandes tables de données.

La discussion continue ailleurs

URL de rétrolien : https://www.footcow.com/index.php?trackback/35

Fil des commentaires de ce billet