Todos os produtos
Search
Central de documentação

DataWorks:Limitar a velocidade da sincronização em lote

Última atualização: Oct 30, 2026

Tarefas de sincronização em lote lentas desperdiçam tempo de pipeline e podem bloquear processos downstream. As tarefas do Data Integration podem apresentar baixo desempenho por diversos motivos: espera por recursos de agendamento ou execução, leitura ou gravação lentas, baixa concorrência ou chaves de divisão mal configuradas. Este tópico explica como usar os logs da tarefa para identificar o estágio do gargalo, ajustar a concorrência e as chaves de divisão para maximizar a vazão e aplicar limites de taxa para proteger bancos de dados de produção.

Fatores que afetam a velocidade de sincronização

Quatro categorias de fatores determinam a velocidade de execução de uma tarefa de sincronização:

Fator

Detalhes

Banco de dados de origem

CPU, memória, disco e largura de banda de rede. Maior concorrência aumenta a carga no banco de dados; bancos com melhor desempenho suportam configurações de concorrência mais elevadas.

Resource group de agendamento

Um resource group de agendamento envia tarefas de sincronização offline para um resource group de integração de dados para execução. O uso de recursos de agendamento impacta a eficiência geral.

Configuração da tarefa

Velocidade máxima de transferência, concorrência (threads lendo da origem ou gravando no destino em paralelo), recursos WAIT, configuração Bytes (padrão: 1.048.576 bytes por thread — reduza este valor se ocorrerem timeouts de rede) e uso de índices nas instruções de consulta.

Banco de dados de destino

CPU, memória, disco e largura de banda de rede. Alta carga no destino reduz a eficiência de gravação.

Diagnosticar tarefas de sincronização lentas

Abra o log da tarefa e o Detail log para identificar qual estágio da execução está lento. A tabela a seguir resume cada estágio e seu principal sinal no log:

Estágio

Sinal no log

Significado

Aguardando recursos de agendamento

A tarefa está aguardando o gateway; longo tempo de espera por recursos na página de propriedades da instância

O resource group de agendamento atingiu seu limite de tarefas

Aguardando recursos de execução

wait no log da tarefa

O resource group de integração de dados não possui slots de concorrência restantes suficientes

Leitura de dados lenta

run com velocidade 0; alto valor de WaitReaderTime no Detail log

A tarefa demora muito para receber dados da origem

Gravação de dados lenta

run com velocidade 0; alto valor de WaitWriterTime no Detail log

A tarefa demora muito para gravar dados no destino

Velocidade diferente de zero, mas progresso geral lento

run com velocidade diferente de zero; duração total excede muito as estimativas

Baixa concorrência, chave de divisão mal configurada, dirty data ou carga elevada no banco de dados

O estágio com o maior tempo de espera representa o gargalo. Comece a solução de problemas por ele.

Para obter mais informações sobre logs de tarefas de sincronização offline, consulte Análise de logs de sincronização offline .

Estágio 1: Aguardando recursos de agendamento

Sintomas:

  • O log da tarefa indica que ela está aguardando o gateway.

  • A página de propriedades da instância apresenta um longo tempo de espera por recursos.

Causa: O resource group de agendamento atingiu seu limite máximo de tarefas. Novas tarefas aguardam até que as tarefas em execução sejam concluídas e liberem recursos.

Solução: No console do DataWorks, acesse a página Run diagnostics para verificar quais tarefas consomem recursos enquanto a tarefa atual aguarda.

Se você utiliza shared resource groups para agendamento, migre suas tarefas para um exclusive resource group ou um Serverless resource group.

Estágio 2: Aguardando recursos de execução

Sintoma: O log da tarefa exibe wait.

Causa: O resource group de integração de dados não possui slots de concorrência restantes suficientes para a tarefa.

Por exemplo: um resource group suporta no máximo 8 slots concorrentes. Se duas tarefas estiverem em execução com concorrência de 3 cada, elas ocupam 6 slots e restam 2 disponíveis. Uma terceira tarefa que necessite de 3 slots concorrentes precisará aguardar.

Solução:

  1. Acesse a página Run diagnostics para identificar quais tarefas consomem recursos.

  2. Verifique se alguma tarefa em execução está travada ou anormalmente lenta. Nesse caso, interrompa-a ou resolva o problema primeiro.

  3. Se as tarefas estiverem executando normalmente, aguarde sua conclusão e a liberação dos recursos.

  4. Coordene com os responsáveis pelas tarefas para reduzir a concorrência das tarefas concorrentes.

  5. Reduza a concorrência da tarefa atual e reenvie-a.

  6. Escale horizontalmente o resource group. Para mais informações, consulte Operações de escalonamento.

O número máximo de slots concorrentes varia conforme a especificação do resource group. Para mais detalhes, consulte Métricas de desempenho e faturamento .

Estágio 3: Leitura de dados lenta (WaitReaderTime elevado)

Sintoma: O log da tarefa mostra run com velocidade igual a 0. O Detail log apresenta um valor alto para WaitReaderTime, indicando que a tarefa aguarda dados da origem por muito tempo.

Causas:

  • A chave de divisão não está configurada corretamente, tornando lenta a execução do SQL de recuperação de dados.

  • Os parâmetros where ou querySql não possuem índice, resultando em full table scan.

  • O banco de dados de origem está sob alta carga durante a sincronização.

  • Problemas de largura de banda ou latência de rede.

Não é possível garantir a velocidade de sincronização pela rede pública.

Solução:

  • Crie índices nos campos usados para filtragem de dados a fim de evitar full table scans.

  • Evite ou reduza funções complexas nas instruções pre-SQL ou post-SQL. Se necessário, execute essas operações no banco de dados antes do início da sincronização.

  • Se a tabela de origem for muito grande, divida a tarefa em várias tarefas menores.

  • Consulte os logs para identificar a instrução SQL causadora do bloqueio e trabalhe com o administrador do banco de dados para resolvê-la.

  • Verifique a carga do banco de dados de origem no momento da sincronização.

Estágio 4: Gravação de dados lenta (WaitWriterTime elevado)

Sintoma: O log da tarefa exibe run com velocidade igual a 0. O Detail log mostra um valor alto para WaitWriterTime, indicando que a tarefa demora muito para gravar no destino.

Causas:

  • As instruções preSql ou postSql no plug-in writer apresentam execução lenta.

  • O banco de dados de destino está sob alta carga durante a sincronização.

  • Problemas de largura de banda ou latência de rede.

Não é possível garantir a velocidade de sincronização pela rede pública.

Solução:

  • Revise e otimize as instruções preSql e postSql na configuração do plug-in writer.

  • Verifique a carga do banco de dados de destino no momento da sincronização.

Estágio 5: Velocidade diferente de zero, mas progresso geral lento

Sintoma: O log da tarefa mostra run com velocidade diferente de zero, mas a tarefa de sincronização leva muito mais tempo do que o esperado.

Causas:

  • A chave de divisão para uma tarefa de banco de dados relacional não foi configurada ou está incorreta, invalidando a configuração de concorrência. A tarefa executa com uma única thread em vez da concorrência configurada.

  • A configuração de concorrência está muito baixa.

  • Um grande volume de dirty data é gerado durante a sincronização.

  • O desempenho do banco de dados é insuficiente para sustentar a concorrência configurada.

  • Problemas de largura de banda ou latência de rede.

Não é possível garantir a velocidade de sincronização pela rede pública.

Solução:

  1. Configure a chave de divisão corretamente. Para etapas de configuração, consulte Configurar uma tarefa na UI codeless.

  2. Aumente a concorrência da tarefa. Dentro da cota máxima de concorrência suportada pelo resource group, planeje a concorrência entre todas as tarefas e aumente a concorrência da tarefa atual conforme necessário. Configure a concorrência na UI codeless ou defina-a diretamente no editor de código. Para limites de resource groups, consulte Métricas de desempenho e faturamento. Para tarefas distribuídas, garanta que: concorrência da tarefa ÷ número de máquinas no resource group ≤ concorrência máxima por máquina

  3. Trate dirty data. Para mais informações, consulte Data Integration.

  4. Use uma rede privada para sincronização entre clouds ou regiões. Para opções de conectividade de rede, consulte Soluções de conectividade de rede.

  5. Verifique a carga do banco de dados no momento da sincronização.

Limitar a velocidade de sincronização

Por padrão, as tarefas do Data Integration executam na maior velocidade possível dentro do limite de concorrência configurado. Velocidades elevadas podem exercer pressão excessiva sobre o banco de dados de produção. Utilize a limitação de taxa para restringir a vazão.

Importante

Mantenha o limite de taxa em ou abaixo de 30 MB/s para evitar sobrecarregar o banco de dados de produção.

O exemplo a seguir define um limite de taxa de 1 MB/s no editor de código:

"setting": {
  "speed": {
    "throttle": true,  // Set to true to enable rate limiting.
    "mbps": 1          // The rate limit in MB/s.
  }
}

Comportamento de throttle:

  • true: A limitação de taxa está ativada. É obrigatório definir mbps com um valor específico. Caso mbps não seja definido, a tarefa falhará ou apresentará comportamento anormal.

  • false: A limitação de taxa está desativada. O valor de mbps será ignorado.

Medição de tráfego: A taxa medida pelo Data Integration reflete o tráfego interno do canal, não o tráfego real da interface de rede (NIC). O tráfego da NIC geralmente é de 1 a 2 vezes superior ao tráfego do canal, dependendo de como o sistema de armazenamento de dados serializa as informações.

Limitação de taxa para arquivos semiestruturados: Arquivos semiestruturados individuais não podem ser divididos e não utilizam chave de divisão. Para múltiplos arquivos, defina um limite de taxa de job para aumentar a vazão. A taxa máxima efetiva depende do número de arquivos. Para n arquivos:

  • Um limite de n+1 MB/s resulta em uma vazão real de n MB/s.

  • Um limite de n-1 MB/s resulta em uma vazão real de n-1 MB/s.

Limitação de taxa para bancos de dados relacionais: Defina tanto um limite de taxa de job quanto uma chave de divisão. A chave de divisão permite o particionamento da tabela alinhado ao limite de taxa. Bancos de dados relacionais geralmente suportam apenas chaves de divisão numéricas. Bancos de dados Oracle suportam chaves de divisão numéricas e de string.

FAQ

  • FAQ sobre sincronização offline

  • BatchSize e maxfilesize: Estes parâmetros controlam o número de registros confirmados por lote. Valores maiores reduzem idas e vindas na rede e melhoram a vazão, mas defini-los muito altos pode causar erro de out-of-memory (OOM) no processo de sincronização. Se ocorrer um erro OOM, consulte FAQ sobre sincronização offline.

Apêndice: Visualizar a concorrência real

Na página de detalhes do log da tarefa, localize uma entrada de log semelhante a:

JobContainer - Job set Channel-Number to 2 channels

O valor de channels representa a concorrência real que a tarefa utiliza.

[ResponseError]:

  AccessDenied
xxx
xxx

2020-09-07 00:26:15.462 [job-323683754] INFO  OdpsWriter$Job - blockSizeInMB=64.
2020-09-07 00:26:15.462 [job-323683754] INFO  JobContainer - jobContainer starts to do prepare ...
2020-09-07 00:26:15.463 [job-323683754] INFO  JobContainer - DataX Reader.Job [ossreader] do prepare work .
2020-09-07 00:26:15.491 [job-323683754] INFO  OssReader$Job - add object [user_log.txt] as a candidate to be read.
2020-09-07 00:26:15.493 [job-323683754] INFO  JobContainer - DataX Writer.Job [odpswriter] do prepare work .
2020-09-07 00:26:15.494 [job-323683754] INFO  IdAndKeyUtil - xxx
2020-09-07 00:26:15.494 [job-323683754] INFO  OdpsWriter$Job - xxx
2020-09-07 00:26:18.045 [job-323683754] INFO  OdpsUtil - Try to xxx
2020-09-07 00:26:19.435 [job-323683754] INFO  OdpsUtil - Try to xxx
alter table xc_ods_raw_log_d add IF NOT EXISTS partition(dt='20200906');
] .
2020-09-07 00:26:21.860 [job-323683754] INFO  JobContainer - jobContainer starts to do split ...
2020-09-07 00:26:21.860 [job-323683754] INFO  JobContainer - Job set Channel-Number to 2 channels.
2020-09-07 00:26:22.120 [job-323683754] INFO  UnstructuredSplitUtil - File to be read:[{"end" xxx ,"filePath":"user_lxxx
2020-09-07 00:26:22.121 [job-323683754] INFO  UnstructuredSplitUtil - File to be read:[{"end"
2020-09-07 00:26:22.121 [job-323683754] INFO  JobContainer - DataX Reader.Job [ossreader] splits to [2] tasks.

Apêndice: Concorrência e uso de recursos em exclusive resource groups

Entender como a concorrência se relaciona com CPU e memória ajuda a planejar o envio de tarefas e evitar contenção de recursos.

Concorrência e CPU

Em um exclusive resource group, a proporção entre concorrência e vCPU é de 1:0,5. Uma instância ECS com 4 vCPUs e 8 GiB de memória fornece uma cota de concorrência de 8. Isso significa:

  • Até 8 tarefas de sincronização offline com concorrência de 1, ou

  • Até 4 tarefas de sincronização offline com concorrência de 2.

Se uma nova tarefa enviada exigir mais concorrência do que a cota restante disponível, ela aguardará até que as tarefas em execução sejam concluídas e liberem recursos.

Aviso

Se a concorrência de uma tarefa exceder a cota máxima do resource group, ela aguardará indefinidamente e bloqueará tarefas subsequentes. Por exemplo, enviar uma tarefa com concorrência de 10 para um resource group em uma instância ECS de 4 vCPU / 8 GiB fará com que a tarefa nunca execute.

Concorrência e memória

O uso de memória por tarefa em um exclusive resource group segue esta fórmula:

Min{768 + (concurrency - 1) × 256, 8029} MB

Substitua essa configuração no editor de código definindo o caminho JSON $.setting.jvmOption.

"setting": {
    "errorLimit": {
        "record": "0"
    },
    "speed": {
        "throttle": false,
        "concurrent": 1
    },
    "jvmOption": "-Xms1024m -Xmx1024m"
}

Para manter a estabilidade das tarefas, a memória total usada por todas as tarefas em execução deve permanecer pelo menos 1 GB abaixo da memória total de todas as máquinas no resource group. Se esse limite for ultrapassado, o Linux OOM Killer poderá encerrar tarefas forçadamente.

Se você não substituir as configurações de memória no editor de código, apenas o limite da cota de concorrência será aplicado ao planejar o envio de tarefas.

Apêndice: Referência de velocidade de sincronização

As tabelas a seguir listam a vazão média de concorrência única para conectores comuns em um exclusive resource group. Use esses valores como base ao estimar a duração esperada da sincronização e ao definir a concorrência.

Esses números foram medidos sob condições controladas em um exclusive resource group. A vazão real varia dependendo do desempenho do seu banco de dados, condições de rede, volume de dados e especificação do resource group.

Plug-ins Writer

Writer

Velocidade média de concorrência única (KB/s)

AnalyticDB for PostgreSQL

147,8

AnalyticDB for MySQL

181,3

ClickHouse

5.259,3

DataHub

45,8

DRDS

93,1

Elasticsearch

74,0

FTP

565,6

GDB

17,1

HBase

2.395,0

hbase20xsql

37,8

HDFS

1.301,3

Hive

1.960,4

HybridDB for MySQL

323,0

HybridDB for PostgreSQL

116,0

Kafka

0,9

SLS

788,5

MongoDB

51,6

MySQL

54,9

MaxCompute

660,6

Oracle

66,7

OSS

3.718,4

OTS

138,5

PolarDB

45,6

PostgreSQL

168,4

Redis

7.846,7

SQLServer

8,3

Stream

116,1

TSDB

2,3

Vertica

272,0

Plug-ins Reader

Reader

Velocidade média de concorrência única (KB/s)

AnalyticDB for PostgreSQL

220,3

AnalyticDB for MySQL

248,6

DRDS

146,4

Elasticsearch

215,8

FTP

279,4

HBase

1.605,6

hbase20xsql

465,3

HDFS

2.202,9

Hologres

741,0

HybridDB for MySQL

111,3

HybridDB for PostgreSQL

496,9

Kafka

3.117,2

SLS

1.014,1

MongoDB

361,3

MySQL

459,5

MaxCompute

207,2

Oracle

133,5

OSS

665,3

OTS

229,3

OTSStream

661,7

PolarDB

238,2

PostgreSQL

165,6

RDBMS

845,6

SQLServer

143,7

Stream

85,0

Vertica

454,3