Tarefas de sincronização em lote lentas desperdiçam tempo de pipeline e podem bloquear processos downstream. As tarefas do Data Integration podem apresentar lentidão por diversos motivos: espera por recursos de agendamento ou execução, leituras ou gravações 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 o throughput e aplicar limitação 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. |
|
Grupo de recursos de agendamento |
Um grupo de recursos de agendamento envia tarefas de sincronização offline para um grupo de recursos do Data Integration 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 indicador no log:
|
Estágio |
Indicador no log |
Significado |
|
Aguardando recursos de agendamento |
A tarefa aguarda o gateway; longo tempo de espera por recursos na página de propriedades da instância |
O grupo de recursos de agendamento atingiu seu limite de tarefas |
|
Aguardando recursos de execução |
|
O grupo de recursos do Data Integration não possui slots de concorrência restantes suficientes |
|
Leitura de dados lenta |
|
A tarefa demora muito para receber dados da origem |
|
Gravação de dados lenta |
|
A tarefa demora muito para gravar dados no destino |
|
Velocidade diferente de zero, mas progresso geral lento |
|
Baixa concorrência, chave de divisão mal configurada, dados incorretos (dirty data) ou carga 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 aguarda o gateway.
A página de propriedades da instância exibe um longo tempo de espera por recursos.
Causa: O grupo de recursos 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: Acesse a página Operation Analysis para verificar quais tarefas consomem recursos enquanto a tarefa atual aguarda.
Se você utiliza grupos de recursos compartilhados para agendamento, migre suas tarefas para um grupo de recursos exclusivo ou um grupo de recursos Serverless.
Estágio 2: Aguardando recursos de execução
Sintoma: O log da tarefa exibe wait.
Causa: O grupo de recursos do Data Integration não possui slots de concorrência restantes suficientes para a tarefa.
Por exemplo: um grupo de recursos 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:
Acesse a página Operation Analysis para identificar quais tarefas consomem recursos.
Verifique se alguma tarefa em execução está travada ou anormalmente lenta. Nesse caso, pare-a ou resolva o problema primeiro.
Se as tarefas executarem normalmente, aguarde a conclusão delas para liberar recursos.
Coordene com os responsáveis pelas tarefas para reduzir a concorrência das tarefas concorrentes.
Reduza a concorrência da tarefa atual e envie-a novamente.
Escale horizontalmente o grupo de recursos. Para mais informações, consulte Operações de dimensionamento.
O número máximo de slots concorrentes varia conforme a especificação do grupo de recursos. Para mais informações, consulte Métricas de desempenho e faturamento .
Estágio 3: Leitura de dados lenta (WaitReaderTime alto)
Sintoma: O log da tarefa exibe run com velocidade 0. O Detail log mostra um valor elevado 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
whereouquerySqlnão possuem índice, resultando em varredura completa da tabela (full table scan).O banco de dados de origem está sob alta carga no momento da 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 varreduras completas de tabela.
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.
Caso a tabela de origem seja 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 alto)
Sintoma: O log da tarefa exibe run com velocidade 0. O Detail log mostra um valor elevado para WaitWriterTime, indicando que a tarefa demora muito para gravar no destino.
Causas:
As instruções
preSqloupostSqlno plug-in de gravação (writer) apresentam execução lenta.O banco de dados de destino está sob alta carga no momento da 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
preSqlepostSqlna configuração do plug-in de gravação.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 exibe 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 está configurada ou está configurada incorretamente, tornando a configuração de concorrência ineficaz. 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 dados incorretos (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:
Configure a chave de divisão corretamente. Para etapas de configuração, consulte Configurar uma tarefa na interface sem código.
Aumente a concorrência da tarefa. Dentro da cota máxima de concorrência suportada pelo grupo de recursos, planeje a concorrência entre todas as tarefas e aumente a concorrência da tarefa atual conforme necessário. Configure a concorrência na interface sem código ou defina-a diretamente no editor de código. Para limites de grupos de recursos, consulte Métricas de desempenho e faturamento. Para tarefas distribuídas, garanta que:
concorrência da tarefa ÷ número de máquinas no grupo de recursos ≤ concorrência máxima por máquinaTrate os dados incorretos. Para mais informações, consulte Data Integration.
Use uma rede privada para sincronização entre nuvens ou entre regiões. Para opções de conectividade de rede, consulte Soluções de conectividade de rede.
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 altas podem pressionar excessivamente o banco de dados de produção. Utilize a limitação de taxa para restringir o throughput.
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 definirmbpscom um valor específico. Sembpsnão for definido, a tarefa falhará ou apresentará comportamento anormal.false: A limitação de taxa está desativada. O valor dembpsé 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 o throughput. A taxa máxima efetiva depende do número de arquivos. Para n arquivos:
Um limite de
n+1MB/s resulta em um throughput real denMB/s.Um limite de
n-1MB/s resulta em um throughput real den-1MB/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.
Perguntas frequentes
BatchSize e maxfilesize: Estes parâmetros controlam o número de registros confirmados (committed) por lote. Valores maiores reduzem as idas e vindas na rede e melhoram o throughput, mas defini-los muito altos pode causar erro de falta de memória (OOM) no processo de sincronização. Se ocorrer um erro OOM, consulte Perguntas frequentes 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.

Apêndice: Concorrência e uso de recursos em grupos de recursos exclusivos
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 grupo de recursos exclusivo, 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 tarefa recém-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.
Se a concorrência de uma tarefa exceder a cota máxima do grupo de recursos, ela aguardará indefinidamente e bloqueará tarefas subsequentes. Por exemplo, enviar uma tarefa com concorrência de 10 para um grupo de recursos em uma instância ECS de 4 vCPU / 8 GiB fará com que a tarefa nunca seja executada.
Concorrência e memória
O uso de memória por tarefa em um grupo de recursos exclusivo 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.

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 grupo de recursos. Se esse limiar for excedido, 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 o throughput médio de concorrência única para conectores comuns em um grupo de recursos exclusivo. Use esses valores como base ao estimar a duração esperada da sincronização e ao definir a concorrência.
Esses valores foram medidos sob condições controladas em um grupo de recursos exclusivo. O throughput real varia dependendo do desempenho do seu banco de dados, condições de rede, volume de dados e especificação do grupo de recursos.
Plug-ins de gravação (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 |
|
LogHub |
788,5 |
|
MongoDB |
51,6 |
|
MySQL |
54,9 |
|
ODPS |
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 de leitura (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 |
|
LogHub |
1.014,1 |
|
MongoDB |
361,3 |
|
MySQL |
459,5 |
|
ODPS |
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 |