Todos os produtos
Search
Central de documentação

PolarDB:Parallel query for cold data

Última atualização: Jun 28, 2026

O Elastic Parallel Query (ePQ) acelera consultas a dados frios armazenados em tabelas OSS ao distribuir o trabalho entre várias threads de execução, seja em um único nó ou simultaneamente em vários nós.

Como funciona

O ePQ atribui tarefas de varredura independentes a workers paralelos. Cada worker lê uma parte dos dados CSV na tabela OSS de forma concorrente e agrega os resultados. O grau de paralelismo depende do número de workers e da quantidade de nós envolvidos.

image

A consulta paralela em dados frios oferece suporte apenas ao formato CSV.

Versões compatíveis

Todos os modos exigem a Enterprise Edition.

Modo

Mecanismo de banco de dados

Versão de revisão mínima

Consulta paralela em nó único (MySQL 8.0.1)

MySQL 8.0.1

8.0.1.1.34

Consulta paralela em nó único (MySQL 8.0.2)

MySQL 8.0.2

8.0.2.2.24

Consulta paralela em múltiplos nós

MySQL 8.0.2

8.0.2.2.24

Pré-requisitos

Antes de começar, verifique se você:

image

O parâmetro loose_csv_max_oss_threads controla o número máximo de threads OSS executadas em paralelo em um único nó. Valores válidos: 1–100. Padrão: 1. Com o valor padrão 1, a consulta paralela permanece desativada. Como cada thread OSS consome 128 MB de memória, defina esse parâmetro conforme a memória disponível no cluster.

Execute consultas paralelas em dados frios

Os exemplos abaixo utilizam um conjunto de dados TPC-H, mas não atendem a todos os requisitos de um teste de benchmark formal do TPC-H. Portanto, os resultados não são comparáveis aos benchmarks TPC-H publicados. Para mais detalhes, consulte Conjunto de dados TPC-H .

Os exemplos usam uma tabela chamada lineitem, arquivada no OSS em formato CSV:

mysql> show create table lineitem;
*************************** 1. row ***************************
       Table: lineitem
Create Table: CREATE TABLE `lineitem` (
  `l_orderkey` int(11) NOT NULL,
  `l_partkey` int(11) NOT NULL,
  `l_suppkey` int(11) NOT NULL,
  `l_linenumber` int(11) NOT NULL,
  `l_quantity` decimal(10,2) NOT NULL,
  `l_extendedprice` decimal(10,2) NOT NULL,
  `l_discount` decimal(10,2) NOT NULL,
  `l_tax` decimal(10,2) NOT NULL,
  `l_returnflag` char(1) NOT NULL,
  `l_linestatus` char(1) NOT NULL,
  `l_shipDATE` date NOT NULL,
  `l_commitDATE` date NOT NULL,
  `l_receiptDATE` date NOT NULL,
  `l_shipinstruct` char(25) NOT NULL,
  `l_shipmode` char(10) NOT NULL,
  `l_comment` varchar(44) NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 /*!99990 800020204 NULL_MARKER='NULL' */ CONNECTION='default_oss_server'

1 row in set (0.00 sec)

Para ativar a consulta paralela, adicione a dica /*+ PARALLEL(N) */ à sua consulta, onde N representa o número de workers por nó. Para verificar se a consulta paralela está ativa, execute EXPLAIN e analise a coluna Extra:

**Valor da coluna Extra**

Significado

Parallel scan (N workers)

Consulta paralela ativa; N indica o total de threads de execução em todos os nós participantes

MPP (N nodes)

Consulta paralela em múltiplos nós ativa; N corresponde ao número de nós participantes

Paralelismo total = workers por nó × número de nós.

Consulta serial

Sem a dica, a consulta é executada em uma única thread. A coluna Extra exibe Using where sem Parallel scan:

mysql> explain SELECT
    ->     sum(l_extendedprice * l_discount) AS revenue
    -> FROM
    ->     lineitem
    -> WHERE
    ->     l_shipdate >= date '1994-01-01'
    ->     AND l_shipdate < date '1994-01-01' + interval '1' year
    ->     AND l_discount between 0.05 - 0.01 AND 0.05 + 0.01
    ->     AND l_quantity < 24;

+----+-------------+----------+------------+------+---------------+------+---------+------+----------+----------+-------------+
| id | select_type | table    | partitions | type | possible_keys | key  | key_len | ref  | rows     | filtered | Extra       |
+----+-------------+----------+------------+------+---------------+------+---------+------+----------+----------+-------------+
|  1 | SIMPLE      | lineitem | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 61560489 |     0.41 | Using where |
+----+-------------+----------+------------+------+---------------+------+---------+------+----------+----------+-------------+

1 row in set, 1 warning (1.23 sec)

A varredura e a agregação da tabela ocorrem sequencialmente em uma única thread.

Consulta paralela em nó único

Adicione /*+ PARALLEL(4) */ para distribuir a varredura entre 4 workers no nó atual. A mensagem Parallel scan (4 workers) na coluna Extra confirma a ativação da consulta paralela:

mysql> explain SELECT /*+ PARALLEL(4) */
    ->     sum(l_extendedprice * l_discount) AS revenue
    -> FROM
    ->     lineitem
    -> WHERE
    ->     l_shipdate >= date '1994-01-01'
    ->     AND l_shipdate < date '1994-01-01' + interval '1' year
    ->     AND l_discount between 0.05 - 0.01 AND 0.05 + 0.01
    ->     AND l_quantity < 24;
+----+-------------+-------------+------------+------+---------------+------+---------+------+----------+----------+----------------------------------------+
| id | select_type | table       | partitions | type | possible_keys | key  | key_len | ref  | rows     | filtered | Extra                                  |
+----+-------------+-------------+------------+------+---------------+------+---------+------+----------+----------+----------------------------------------+
|  1 | SIMPLE      | <gather1.1> | NULL       | ALL  | NULL          | NULL | NULL    | NULL |        4 |   100.00 | NULL                                   |
|  1 | SIMPLE      | lineitem    | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 15390122 |     0.41 | Parallel scan (4 workers); Using where |
+----+-------------+-------------+------------+------+---------------+------+---------+------+----------+----------+----------------------------------------+

2 rows in set, 1 warning (2.17 sec)

Quatro workers executam em paralelo no nó atual, proporcionando aproximadamente 4 vezes o throughput de uma consulta single-thread.

Consulta paralela em múltiplos nós

Quando vários nós participam, a coluna Extra exibe tanto Parallel scan (N workers) quanto MPP (N nodes). Neste cenário, Parallel scan (8 workers) indica 8 workers ativos no total entre todos os nós, enquanto MPP (2 nodes) sinaliza a participação de 2 nós, com 4 workers cada:

mysql> explain SELECT /*+ PARALLEL(4) */
    ->     sum(l_extendedprice * l_discount) AS revenue
    -> FROM
    ->     lineitem
    -> WHERE
    ->     l_shipdate >= date '1994-01-01'
    ->     AND l_shipdate < date '1994-01-01' + interval '1' year
    ->     AND l_discount between 0.05 - 0.01 AND 0.05 + 0.01
    ->     AND l_quantity < 24;
+----+-------------+-------------+------------+------+---------------+------+---------+------+----------+----------+-------------------------------------------------------+
| id | select_type | table       | partitions | type | possible_keys | key  | key_len | ref  | rows     | filtered | Extra                                                 |
+----+-------------+-------------+------------+------+---------------+------+---------+------+----------+----------+-------------------------------------------------------+
|  1 | SIMPLE      | <gather1.1> | NULL       | ALL  | NULL          | NULL | NULL    | NULL |        1 |   100.00 | NULL                                                  |
|  1 | SIMPLE      | lineitem    | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 59986051 |     0.41 | Parallel scan (8 workers); MPP (2 nodes); Using where |
+----+-------------+-------------+------------+------+---------------+------+---------+------+----------+----------+-------------------------------------------------------+

2 rows in set, 1 warning (0.00 sec)

Com 2 nós e 8 workers no total, o throughput da consulta atinge aproximadamente 8 vezes o valor de uma consulta single-thread.

Solução de problemas

Caso o EXPLAIN não mostre Parallel scan na coluna Extra, a consulta paralela não foi ativada. Verifique os itens a seguir:

Condição

Correção

loose_csv_max_oss_threads definido como 1 (padrão)

Defina como 2 ou superior

Dados frios fora do formato CSV

Converta os dados para CSV antes de arquivar

Versão do cluster inferior ao requisito mínimo

Atualize para uma versão de revisão compatível (consulte Versões compatíveis)

ePQ desativado

Ative o ePQ (consulte Ativar elastic parallel query)