DBAtlas · Atlas de operações de banco de dados

Executar uma consulta paralela / definir o grau de paralelismo

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;

O hint PARALLEL aplica uma varredura paralela à tabela; degree=DOP. Um DOP excessivo esgota os recursos do servidor; escolha-o com cuidado. parallel_degree_policy=AUTO o gerencia automaticamente.

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;

Se Gather/Parallel Seq Scan aparecer no plano, o paralelismo está em vigor. max_parallel_workers e min_parallel_table_scan_size também influenciam.

MySQL

-- Limited InnoDB parallelism (certain operations only):
SET GLOBAL innodb_parallel_read_threads = 4;
-- Effective for COUNT(*) and primary key scans.

O MySQL não oferece execução paralela geral de consultas; innodb_parallel_read_threads só paraleliza varreduras do clustered index (ex.: COUNT(*)). JOINs complexos são single-threaded.

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 limita o número de threads paralelas; MAXDOP 1 desabilita o paralelismo. Quando o 'cost threshold for parallelism' é ultrapassado, o plano passa a ser paralelo.

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.

Em um cluster com sharding, a consulta é executada em cada shard em paralelo; em um único nó, os estágios de agregação são majoritariamente sequenciais. allowDiskUse permite operações que excedem o limite de memória.

Redis

# Not applicable: there is no concept of query parallelism.

A execução de comandos é single-threaded; escale com Cluster (sharding) ou use io-threads para paralelismo de I/O de rede.

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": {} } }

Uma busca é executada simultaneamente em todos os shards relevantes; o número de primary shards define o nível básico de paralelismo. slices dividem operações grandes de scroll/reindex.

Abrir no DBAtlas →