Параллельный запрос / степень параллелизма
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;Хинт PARALLEL применяет к таблице параллельное сканирование; degree=DOP. Чрезмерный DOP исчерпывает ресурсы сервера, выбирайте его осторожно. parallel_degree_policy=AUTO управляет им автоматически.
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;Если в плане есть Gather/Parallel Seq Scan, параллелизм работает. Роль играют также max_parallel_workers и min_parallel_table_scan_size.
MySQL
-- Limited InnoDB parallelism (certain operations only):
SET GLOBAL innodb_parallel_read_threads = 4;
-- Effective for COUNT(*) and primary key scans.MySQL не предлагает общего параллельного выполнения запросов; innodb_parallel_read_threads распараллеливает только сканирование кластерного индекса (напр. COUNT(*)). Сложные JOIN выполняются в одном потоке.
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 ограничивает число параллельных потоков; MAXDOP 1 отключает параллелизм. При превышении «cost threshold for parallelism» план становится параллельным.
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.В шардированном кластере запрос выполняется на каждом шарде параллельно; на одном узле этапы агрегации в основном последовательны. allowDiskUse разрешает операции, превышающие лимит памяти.
Redis
# Not applicable: there is no concept of query parallelism.Выполнение команд однопоточное; масштабируйтесь через Cluster (шардинг) или используйте io-threads для параллелизма сетевого ввода-вывода.
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": {} } }Поиск выполняется одновременно на всех соответствующих шардах; число primary-шардов задаёт базовый уровень параллелизма. slices разделяют большие операции scroll/reindex.