Todos os produtos
Search
Central de documentação

PolarDB:Exportar tabelas locais para o mecanismo OSS em paralelo

Última atualização: Jun 28, 2026

O PolarDB for MySQL permite exportar uma tabela local para o Object Storage Service (OSS) com vários workers paralelos, o que reduz significativamente o tempo de exportação de grandes conjuntos de dados.

Pré-requisitos

Antes de começar, verifique se você tem:

  • Um cluster PolarDB for MySQL executando a Enterprise Edition, com número de revisão 8.0.1.1.38 ou posterior (versão 8.0.1) ou 8.0.2.2.25 ou posterior (versão 8.0.2).

  • Um bucket do OSS e um servidor OSS configurados no cluster. Para instruções de configuração, consulte Usar tabelas externas do OSS para acessar dados do OSS.

  • (Recomendado) Uma conexão com um nó somente leitura. Execute tarefas de exportação em um nó somente leitura para evitar impacto no nó primário. Adicione a dica /*FORCE_SLAVE*/ à instrução SQL ou conecte-se diretamente a um nó somente leitura.

Limitações

  • Somente consultas de tabela única (SELECT * FROM table) admitem exportação paralela. Consultas com JOIN, ORDER BY ou GROUP BY não são elegíveis para exportação paralela.

Sintaxe

SELECT [/*+parallel(N)*/] * FROM table_name
INTO OSSOUTFILE 'outfile_path'
[COLUMNS TERMINATED BY 'string']
[[OPTIONALLY] ENCLOSED BY 'char']
[NULL_MARKER BY 'string' | ESCAPED BY 'char']
[LINES TERMINATED BY 'string'];

Para acionar a exportação paralela, adicione a dica /*+parallel(N)*/, em que N é o número de workers paralelos. Alternativamente, ative o recurso de consulta paralela elástica para que o banco de dados determine automaticamente o grau de paralelismo. Para mais informações, consulte Visão geral.

Para a sintaxe completa do SELECT estendida pela cláusula INTO OSSOUTFILE, consulte a documentação do MySQL.

Cláusulas

Cláusula

Descrição

COLUMNS TERMINATED BY 'string'

Delimitador entre campos.

OPTIONALLY ENCLOSED BY 'char'

Caractere inserido em ambas as extremidades de um campo. Com OPTIONALLY, o caractere aplica-se apenas a campos do tipo string. Sem essa opção, aplica-se a todos os tipos de campo.

NULL_MARKER BY 'string'

Representação textual de valores NULL. Tem a maior prioridade. Pode ser qualquer string.

ESCAPED BY 'char'

Prefixo de escape de caractere único. A saída NULL torna-se o caractere de escape seguido por N — por exemplo, ESCAPED BY '\' gera \N. Tem a segunda prioridade após NULL_MARKER. Se nenhum dos dois estiver definido, NULL será gerado como a string literal NULL sem caracteres de delimitação.

LINES TERMINATED BY 'string'

Delimitador entre linhas.

Parâmetros

Parâmetro

Descrição

outfile_path

Caminho de destino no OSS. Consiste em três partes separadas por barras (/): nome do servidor OSS, caminho opcional da tarefa (que pode conter múltiplas / para caminhos multinível) e nome do arquivo de saída. O caminho completo do OSS após o upload é: caminho do servidor OSS + caminho da tarefa. O nome do arquivo é obrigatório.

table_name

Nome da tabela local a exportar.

Parâmetro global

Parâmetro

Padrão

Intervalo válido

Descrição

loose_oss_outfile_buffer_size

134217728 bytes (128 MiB)

102400–536870912 bytes

Memória alocada por thread de worker de exportação paralela. Aumentar esse valor geralmente melhora o throughput de exportação.

Considerações

Limiar mínimo de dados para exportação paralela

Cada worker deve gravar pelo menos 1.024 KB (pq_oss_min_worker_write_size) de dados. Se a saída estimada por worker ficar abaixo desse limiar, a exportação paralela não será usada. Siga as etapas de solução de problemas abaixo para confirmar se a exportação paralela foi ativada.

Monitorar uma exportação em andamento

Execute os comandos a seguir em uma sessão separada durante a exportação. Ao conectar-se por meio de um endpoint de cluster, execute esses comandos no mesmo nó da instrução de exportação.

  • Memória total usada pela tarefa de exportação atual (bytes):

    SHOW STATUS LIKE "%Oss_outfile_memory_used%";
  • Número total de threads de worker de exportação ativas:

    SHOW STATUS LIKE "%Oss_outfile_threads_running%";

Exportar uma tabela em paralelo

O exemplo a seguir exporta a tabela lineitem com 4 workers paralelos.

  1. Verifique se a consulta suporta execução paralela. Execute EXPLAIN para confirmar se o planejador consegue paralelizar a varredura:

    EXPLAIN SELECT /*+parallel(4)*/ * FROM lineitem;

    Saída esperada:

    +----+-------------+-----------+------------+------+---------------+------+---------+------+---------+----------+---------------------------+
    | id | select_type | table     | partitions | type | possible_keys | key  | key_len | ref  | rows    | filtered | Extra                     |
    +----+-------------+-----------+------------+------+---------------+------+---------+------+---------+----------+---------------------------+
    |  1 | SIMPLE      | <gather1> | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 5392844 |   100.00 | NULL                      |
    |  1 | SIMPLE      | lineitem  | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 1348211 |   100.00 | Parallel scan (4 workers) |
    +----+-------------+-----------+------------+------+---------------+------+---------+------+---------+----------+---------------------------+

    A execução paralela está disponível quando a coluna Extra exibe Parallel scan.

  2. Crie um servidor OSS. Ignore esta etapa se já tiver um servidor OSS configurado.

    CREATE SERVER outserver FOREIGN DATA WRAPPER oss OPTIONS (
      EXTRA_SERVER_INFO '{"oss_endpoint": "oss-cn-zhangjiakou.aliyuncs.com",
                          "oss_bucket": "polardb",
                          "oss_access_key_id": "<your-access-key-id>",
                          "oss_access_key_secret": "<your-access-key-secret>",
                          "oss_prefix": "B_outfile"}'
    );

    Substitua os valores de espaço reservado pelas credenciais do OSS e informações do bucket.

  3. Confirme se a exportação paralela é suportada para esta consulta. Execute EXPLAIN na instrução completa de exportação para garantir que o planejador usará a exportação paralela:

    EXPLAIN SELECT /*+parallel(4)*/ * FROM lineitem
    INTO OSSOUTFILE 'outserver/t1.CSV'
    COLUMNS TERMINATED BY ','
    OPTIONALLY ENCLOSED BY '"'
    NULL_MARKER BY 'NULL'
    LINES TERMINATED BY '\n';

    Saída esperada:

    +----+-------------+-----------+------------+------+---------------+------+---------+------+---------+----------+--------------------------------------------------------+
    | id | select_type | table     | partitions | type | possible_keys | key  | key_len | ref  | rows    | filtered | Extra                                                  |
    +----+-------------+-----------+------------+------+---------------+------+---------+------+---------+----------+--------------------------------------------------------+
    |  1 | SIMPLE      | <gather1> | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 5805759 |   100.00 | Parallel export OSS outfile                            |
    |  1 | SIMPLE      | lineitem  | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 1451439 |   100.00 | Parallel scan (4 workers); Parallel export OSS outfile |
    +----+-------------+-----------+------------+------+---------------+------+---------+------+---------+----------+--------------------------------------------------------+

    A exportação paralela está ativa quando a coluna Extra mostra Parallel export OSS outfile. Caso não apareça, consulte Solução de problemas.

  4. Execute a exportação.

    SELECT /*+parallel(4)*/ * FROM lineitem
    INTO OSSOUTFILE 'outserver/t1.CSV'
    COLUMNS TERMINATED BY ','
    OPTIONALLY ENCLOSED BY '"'
    NULL_MARKER BY 'NULL'
    LINES TERMINATED BY '\n';

    Durante a exportação, monitore o uso de recursos em outra sessão com os comandos SHOW STATUS descritos em Considerações.

Solução de problemas

Se a saída do EXPLAIN não mostrar Parallel export OSS outfile, use o rastreamento do otimizador para identificar o motivo.

  1. Ative o rastreamento do otimizador:

    SET optimizer_trace="enabled=on";
  2. Execute a instrução a seguir para visualizar os planos de execução das instruções SQL cujos resultados são exportados em paralelo:

    EXPLAIN SELECT /*+parallel(4)*/ * FROM lineitem WHERE l_orderkey < 100
    INTO OSSOUTFILE 'default_oss_server/t1'
    COLUMNS TERMINATED BY ','
    OPTIONALLY ENCLOSED BY '"'
    NULL_MARKER BY 'NULL'
    LINES TERMINATED BY '\n';
  3. Consulte o resultado do rastreamento:

    SELECT * FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
  4. Na saída, localize o objeto considered_parallel_outfile e leia o campo cause:

    "considered_parallel_outfile": {
      "choose": false,
      "storage": "OSS",
      "format": "CSV",
      "mean_outfile_record_length": "79 B",
      "estimate_single_worker_outfile_size": "8 KB",
      "cause": "The data written by each worker should be greater than 1024 KB (pq_oss_min_worker_write_size)."
    }

    O campo cause explica por que a exportação paralela não foi usada.

Próximos passos