Tous les produits
Search
Centre de documentation

DataWorks:Réguler la synchronisation par lots

Dernière mise à jour :Aug 24, 2026

Les tâches de synchronisation par lots lentes gaspillent du temps de pipeline et peuvent bloquer les processus en aval. Les tâches Data Integration peuvent être ralenties pour plusieurs raisons : attente de ressources de planification ou d'exécution, lectures ou écritures lentes, faible concurrence ou clés de partitionnement mal configurées. Cette rubrique explique comment utiliser les journaux des tâches pour identifier l'étape goulot d'étranglement, ajuster la concurrence et les clés de partitionnement pour maximiser le débit, et appliquer une limitation du débit pour protéger les bases de données de production.

Facteurs influençant la vitesse de synchronisation

Quatre catégories de facteurs déterminent la vitesse d'exécution d'une tâche de synchronisation :

Facteur Détails
Base de données source CPU, mémoire, disque et bande passante réseau. Une concurrence plus élevée augmente la charge de la base de données ; les bases de données plus performantes peuvent supporter des paramètres de concurrence plus élevés.
Groupe de ressources de planification Les tâches de synchronisation hors ligne sont soumises par un groupe de ressources de planification à un groupe de ressources d'intégration de données pour exécution. L'utilisation des ressources de planification affecte l'efficacité globale.
Configuration de la tâche Vitesse de transfert maximale, concurrence (threads lisant depuis la source ou écrivant vers la destination en parallèle), ressources WAIT, paramètre Bytes (par défaut : 1 048 576 octets par thread — réduisez cette valeur en cas de délais d'expiration réseau) et utilisation d'index dans les instructions de requête.
Base de données de destination CPU, mémoire, disque et bande passante réseau. Une charge élevée sur la destination réduit l'efficacité d'écriture.

Diagnostiquer les tâches de synchronisation lentes

Ouvrez le journal de la tâche et le Detail log pour identifier l'étape d'exécution qui est lente. Le tableau suivant résume chaque étape et son signal de journal clé :

Étape Signal de journal Signification
Attente des ressources de planification La tâche attend la passerelle ; temps d'attente des ressources long sur la page des propriétés de l'instance Le groupe de ressources de planification a atteint sa limite de tâches
Attente des ressources d'exécution wait dans le journal de la tâche Le groupe de ressources d'intégration de données ne dispose pas de slots de concurrence disponibles suffisants
Lecture des données lente run avec une vitesse de 0 ; valeur WaitReaderTime élevée dans le Detail log La tâche attend longtemps de recevoir des données de la source
Écriture des données lente run avec une vitesse de 0 ; valeur WaitWriterTime élevée dans le Detail log La tâche met beaucoup de temps à écrire les données dans la destination
Vitesse non nulle mais progression globale lente run avec une vitesse non nulle ; durée totale bien supérieure aux estimations Faible concurrence, clé de partitionnement mal configurée, données incorrectes ou charge de la base de données

L'étape présentant le temps d'attente le plus long constitue votre goulot d'étranglement. Commencez le dépannage à ce niveau.

Pour plus d'informations sur les journaux des tâches de synchronisation hors ligne, consultez Analyse des journaux de synchronisation hors ligne .

Étape 1 : Attente des ressources de planification

Symptômes :

  • Le journal de la tâche indique que la tâche attend la passerelle.

  • La page des propriétés de l'instance affiche un temps d'attente des ressources élevé.

Cause : Le groupe de ressources de planification a atteint sa limite maximale de tâches. Les nouvelles tâches doivent attendre que les tâches en cours se terminent et libèrent les ressources.

Solution : Dans la console DataWorks, accédez à la page Operation Analysis pour voir quelles tâches utilisent les ressources pendant que la tâche actuelle est en attente.

Si vous utilisez des groupes de ressources partagés pour la planification, migrez vos tâches vers un groupe de ressources exclusif ou un groupe de ressources Serverless.

Étape 2 : Attente des ressources d'exécution

Symptôme : Le journal de la tâche affiche wait.

Cause : Le groupe de ressources d'intégration de données ne dispose pas de slots de concurrence disponibles suffisants pour la tâche.

Par exemple : un groupe de ressources prend en charge un maximum de 8 slots de concurrence. Si deux tâches s'exécutent avec une concurrence de 3 chacune, elles utilisent 6 slots, laissant 2 disponibles. Une troisième tâche nécessitant 3 slots de concurrence doit attendre.

Solution :

  1. Accédez à la page Operation Analysis pour voir quelles tâches consomment des ressources.

  2. Vérifiez si des tâches en cours sont bloquées ou anormalement lentes. Le cas échéant, arrêtez-les ou résolvez le problème en premier lieu.

  3. Si les tâches s'exécutent normalement, attendez qu'elles se terminent et libèrent les ressources.

  4. Coordonnez-vous avec les propriétaires des tâches pour réduire la concurrence des tâches concurrentes.

  5. Réduisez la concurrence de la tâche actuelle et soumettez-la à nouveau.

  6. Mettez à l'échelle le groupe de ressources. Pour plus d'informations, consultez Opérations de mise à l'échelle.

Le nombre maximal de slots de concurrence varie selon la spécification du groupe de ressources. Pour plus d'informations, consultez Métriques de performance et facturation .

Étape 3 : Lecture des données lente (WaitReaderTime élevé)

Symptôme : Le journal de la tâche affiche run avec une vitesse de 0. Le Detail log affiche une valeur élevée pour WaitReaderTime, indiquant que la tâche attend longtemps des données de la source.

Causes :

  • La clé de partitionnement n'est pas correctement configurée, ce qui ralentit l'exécution de la requête SQL de récupération des données.

  • Les paramètres where ou querySql ne sont pas indexés, provoquant une analyse complète de la table.

  • La base de données source est fortement sollicitée au moment de la synchronisation.

  • Problèmes de bande passante ou de latence réseau.

La vitesse de synchronisation via le réseau public ne peut pas être garantie.

Solution :

  • Indexez les champs utilisés pour le filtrage des données afin d'éviter les analyses complètes de table.

  • Évitez ou réduisez l'utilisation de fonctions complexes dans les instructions pre-SQL ou post-SQL. Si nécessaire, exécutez ces opérations dans la base de données avant le début de la synchronisation.

  • Si la table source est très volumineuse, divisez la tâche en plusieurs tâches plus petites.

  • Interrogez les journaux pour identifier l'instruction SQL bloquante et collaborez avec votre administrateur de base de données pour la résoudre.

  • Vérifiez la charge de la base de données source au moment de la synchronisation.

Étape 4 : Écriture des données lente (WaitWriterTime élevé)

Symptôme : Le journal de la tâche affiche run avec une vitesse de 0. Le Detail log affiche une valeur élevée pour WaitWriterTime, indiquant que la tâche met beaucoup de temps à écrire dans la destination.

Causes :

  • Les instructions preSql ou postSql du plug-in writer s'exécutent lentement.

  • La base de données de destination est fortement sollicitée au moment de la synchronisation.

  • Problèmes de bande passante ou de latence réseau.

La vitesse de synchronisation via le réseau public ne peut pas être garantie.

Solution :

  • Examinez et optimisez les instructions preSql et postSql dans la configuration du plug-in writer.

  • Vérifiez la charge de la base de données de destination au moment de la synchronisation.

Étape 5 : Vitesse non nulle mais progression globale lente

Symptôme : Le journal de la tâche affiche run avec une vitesse non nulle, mais la tâche de synchronisation prend beaucoup plus de temps que prévu.

Causes :

  • La clé de partitionnement pour une tâche de base de données relationnelle n'est pas configurée ou est mal configurée, rendant le paramètre de concurrence inefficace. La tâche s'exécute avec un seul thread au lieu de la concurrence configurée.

  • Le paramètre de concurrence est trop faible.

  • Un volume important de données incorrectes est généré pendant la synchronisation.

  • Les performances de la base de données sont insuffisantes pour supporter la concurrence configurée.

  • Problèmes de bande passante ou de latence réseau.

La vitesse de synchronisation via le réseau public ne peut pas être garantie.

Solution :

  1. Configurez correctement la clé de partitionnement. Pour les étapes de configuration, consultez Configurer une tâche dans l'interface sans code.

  2. Augmentez la concurrence de la tâche. Dans la limite du quota de concurrence maximal pris en charge par le groupe de ressources, planifiez la concurrence pour toutes les tâches et augmentez la concurrence de la tâche actuelle si nécessaire. Configurez la concurrence dans l'interface sans code ou définissez-la directement dans l'éditeur de code. Pour les limites du groupe de ressources, consultez Métriques de performance et facturation. Pour les tâches distribuées, assurez-vous que : concurrence de la tâche ÷ nombre de machines dans le groupe de ressources ≤ concurrence maximale par machine

  3. Gérez les données incorrectes. Pour plus d'informations, consultez Data Integration.

  4. Utilisez un réseau privé pour la synchronisation inter-cloud ou inter-région. Pour les options de connectivité réseau, consultez Solutions de connectivité réseau.

  5. Vérifiez la charge de la base de données au moment de la synchronisation.

Limiter la vitesse de synchronisation

Par défaut, les tâches Data Integration s'exécutent à la vitesse la plus élevée possible dans la limite de concurrence configurée. Des vitesses élevées peuvent exercer une pression excessive sur votre base de données de production. Utilisez la limitation du débit pour plafonner le débit.

Important

Maintenez la limite de débit à 30 Mo/s ou moins pour éviter de surcharger votre base de données de production.

L'exemple suivant définit une limite de débit de 1 Mo/s dans l'éditeur de code :

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

Comportement de throttle :

  • true : La limitation du débit est activée. Vous devez définir mbps sur une valeur spécifique. Si mbps n'est pas défini, la tâche échoue ou se comporte de manière anormale.

  • false : La limitation du débit est désactivée. La valeur mbps est ignorée.

Mesure du trafic : Le débit mesuré par Data Integration reflète le trafic interne des canaux, et non le trafic réel de l'interface réseau (NIC). Le trafic NIC est généralement 1 à 2 fois supérieur au trafic des canaux, selon la manière dont le système de stockage des données sérialise les données.

Limitation du débit pour les fichiers semi-structurés : Les fichiers semi-structurés uniques ne peuvent pas être divisés et n'utilisent pas de clé de partitionnement. Pour plusieurs fichiers, définissez une limite de débit pour la tâche afin d'augmenter le débit. Le débit maximal effectif dépend du nombre de fichiers. Pour n fichiers :

  • Une limite de n+1 Mo/s donne un débit réel de n Mo/s.

  • Une limite de n-1 Mo/s donne un débit réel de n-1 Mo/s.

Limitation du débit pour les bases de données relationnelles : Définissez à la fois une limite de débit pour la tâche et une clé de partitionnement. La clé de partitionnement permet le partitionnement de la table conformément à la limite de débit. Les bases de données relationnelles prennent généralement en charge uniquement les clés de partitionnement numériques. Les bases de données Oracle prennent en charge les clés de partitionnement numériques et textuelles.

FAQ

  • FAQ sur la synchronisation hors ligne

  • BatchSize et maxfilesize : Ces paramètres contrôlent le nombre d'enregistrements validés par lot. Des valeurs plus élevées réduisent les allers-retours réseau et améliorent le débit, mais des valeurs trop élevées peuvent provoquer une erreur d'épuisement de la mémoire (OOM) dans le processus de synchronisation. En cas d'erreur OOM, consultez FAQ sur la synchronisation hors ligne.

Annexe : Afficher la concurrence réelle

Sur la page des détails du journal de la tâche, recherchez une entrée de journal similaire à :

JobContainer - Job set Channel-Number to 2 channels

La valeur channels correspond à la concurrence réelle utilisée par la tâche.

[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.

Annexe : Concurrence et utilisation des ressources dans les groupes de ressources exclusifs

Comprendre comment la concurrence se traduit en termes de CPU et de mémoire vous aide à planifier les soumissions de tâches et à éviter la contention des ressources.

Concurrence et CPU

Dans un groupe de ressources exclusif, le ratio entre la concurrence et le vCPU est de 1:0,5. Une instance ECS avec 4 vCPU et 8 Go de mémoire offre un quota de concurrence de 8. Cela signifie :

  • Jusqu'à 8 tâches de synchronisation hors ligne avec une concurrence de 1, ou

  • Jusqu'à 4 tâches de synchronisation hors ligne avec une concurrence de 2.

Si une tâche nouvellement soumise nécessite plus de concurrence que le quota restant, elle attend que les tâches en cours se terminent et libèrent les ressources.

Avertissement

Si la concurrence d'une tâche dépasse le quota maximal du groupe de ressources, elle attend indéfiniment et bloque les tâches suivantes. Par exemple, soumettre une tâche avec une concurrence de 10 à un groupe de ressources sur une instance ECS de 4 vCPU / 8 Go signifie que la tâche ne s'exécutera jamais.

Concurrence et mémoire

L'utilisation de la mémoire par tâche dans un groupe de ressources exclusif suit cette formule :

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

Remplacez ceci dans l'éditeur de code en définissant le chemin JSON $.setting.jvmOption.

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

Pour maintenir la stabilité des tâches, la mémoire totale utilisée par toutes les tâches en cours doit rester inférieure d'au moins 1 Go à la mémoire totale de toutes les machines du groupe de ressources. Si ce seuil est dépassé, le tueur OOM Linux peut arrêter de force les tâches.

Si vous ne remplacez pas les paramètres de mémoire dans l'éditeur de code, seule la limite de quota de concurrence s'applique lors de la planification des soumissions de tâches.

Annexe : Référence de vitesse de synchronisation

Les tableaux suivants listent le débit moyen par concurrence unique pour les connecteurs courants dans un groupe de ressources exclusif. Utilisez ces valeurs comme référence de base lors de l'estimation de la durée de synchronisation attendue et de la définition de la concurrence.

Ces chiffres sont mesurés dans des conditions contrôlées dans un groupe de ressources exclusif. Le débit réel varie en fonction des performances de votre base de données, des conditions réseau, du volume de données et de la spécification du groupe de ressources.

Plug-ins writer

Writer Vitesse moyenne par concurrence unique (Ko/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 Vitesse moyenne par concurrence unique (Ko/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