Exécuter une requête parallèle / définir le degré de parallélisme
Oracle
-- At query level with a hint:
SELECT /*+ PARALLEL(t, 4) */ * FROM big_table t;
-- Force at session level:
ALTER SESSION FORCE PARALLEL QUERY PARALLEL 4;Le hint PARALLEL applique un parcours parallèle à la table ; degree=DOP. Un DOP excessif épuise les ressources du serveur, choisissez-le avec soin. parallel_degree_policy=AUTO le gère automatiquement.
PostgreSQL
-- Set the number of parallel workers for the session:
SET max_parallel_workers_per_gather = 4;
-- The planner adds a Gather/Gather Merge node:
EXPLAIN (ANALYZE) SELECT count(*) FROM big_table;Si Gather/Parallel Seq Scan apparaît dans le plan, le parallélisme est actif. max_parallel_workers et min_parallel_table_scan_size jouent aussi un rôle.
MySQL
-- Limited InnoDB parallelism (certain operations only):
SET GLOBAL innodb_parallel_read_threads = 4;
-- Effective for COUNT(*) and primary key scans.MySQL n'offre pas d'exécution parallèle générale des requêtes ; innodb_parallel_read_threads ne parallélise que les parcours d'index cluster (par ex. COUNT(*)). Les JOIN complexes sont mono-thread.
SQL Server
-- MAXDOP hint at query level:
SELECT * FROM dbo.big_table OPTION (MAXDOP 4);
-- Instance level: sp_configure 'max degree of parallelism', 4;MAXDOP limite le nombre de threads parallèles ; MAXDOP 1 désactive le parallélisme. Une fois le « cost threshold for parallelism » dépassé, le plan devient parallèle.
MongoDB
// Allow disk use for a large aggregation:
db.sale.aggregate([ { $group: { _id: "$city", t: { $sum: "$amount" } } } ], { allowDiskUse: true })
// A sharded cluster processes each shard in parallel.Dans un cluster shardé, la requête s'exécute en parallèle sur chaque shard ; sur un seul nœud, les étapes d'agrégation sont surtout séquentielles. allowDiskUse permet les opérations qui dépassent la limite mémoire.
Redis
# Not applicable: there is no concept of query parallelism.L'exécution des commandes est mono-thread ; passez à l'échelle avec Cluster (sharding) ou utilisez io-threads pour paralléliser les E/S réseau.
Elasticsearch
# Shard count = unit of parallelism; a query runs in parallel across shards.
# Parallelism by slicing within a single shard (with scroll/PIT):
GET <index>/_search
{ "slice": { "id": 0, "max": 4 }, "query": { "match_all": {} } }Une recherche s'exécute simultanément sur tous les shards concernés ; le nombre de primary shards fixe le niveau de parallélisme de base. slices découpe les opérations scroll/reindex volumineuses.