Tous les produits
Search
Centre de documentation

ApsaraDB RDS:Causes et solutions de la latence de synchronisation des instances en lecture seule ApsaraDB RDS for MySQL

Dernière mise à jour :Aug 08, 2026

Les instances en lecture seule ApsaraDB RDS utilisent la réplication asynchrone ou semi-asynchrone native basée sur les journaux de MySQL pour rester synchronisées avec l'instance principale. Ce mécanisme peut engendrer un décalage susceptible de provoquer des incohérences temporaires de données ou de saturer la capacité de stockage de l'instance en lecture seule à mesure que les journaux binaires s'accumulent.

Si l'instance RDS principale génère un grand nombre de journaux, ses instances en lecture seule risquent d'être verrouillées.

Cette rubrique vous aide à interpréter les métriques de latence de réplication, à identifier la cause racine et à résoudre le problème.

Mesure de la latence de réplication

Le champ Seconds_Behind_Master dans la sortie de la commande SHOW SLAVE STATUS \G indique la latence de réplication en secondes.

Formule de latence : Latence = Heure actuelle − Horodatage de validation de la transaction appliquée sur l'instance en lecture seule, tel qu'enregistré sur l'instance RDS principale.

Exécutez l'instruction suivante sur l'instance en lecture seule pour vérifier son état de réplication actuel :

SHOW SLAVE STATUS \G

Champs clés à examiner :

Champ Éléments à vérifier
Slave_IO_Running Doit afficher Yes. La valeur No indique que la réplication est interrompue.
Slave_SQL_Running Doit afficher Yes. La valeur No indique que la réplication est interrompue.
Seconds_Behind_Master Latence de réplication en secondes. La valeur 0 signifie que l'instance en lecture seule est synchronisée. La valeur NULL signifie que la réplication n'est pas active.
Exec_Master_Log_Pos Si cette valeur reste inchangée tandis que Seconds_Behind_Master continue d'augmenter, le thread SQL est bloqué sur une transaction volumineuse ou une opération DDL.
Last_IO_Error / Last_SQL_Error Messages d'erreur pour le thread I/O ou le thread SQL, le cas échéant.

Latence <= 1 seconde : quand l'ignorer

Une latence signalée inférieure ou égale à 1 seconde n'indique généralement pas de problème réel. Deux causes courantes expliquent ce phénomène :

Granularité de la surveillance. Si la plage de temps de surveillance dépasse 6 minutes, la granularité par défaut peut atteindre 30 secondes. La valeur affichée représente une moyenne sur cet intervalle, et non une lecture instantanée. Pour obtenir une granularité d'une seconde, accédez à l'onglet Performance Trends dans la console ApsaraDB RDS et définissez la plage de temps de surveillance sur moins de 6 minutes.

Échantillonnage trans-seconde. Les points d'échantillonnage sont toujours arrondis à la seconde inférieure. Si une transaction commence durant une seconde et se termine durant la suivante, le calcul de latence signale 1 seconde, indépendamment du décalage réel inférieur à la seconde. Le tableau ci-dessous illustre ce comportement :

Transaction Heure de validation sur l'instance principale Heure de validation sur l'instance en lecture seule Heure actuelle Latence signalée
Trx1 00:00:00,30 00:00:00,50 00:00:00,35 0(0,35) - 0(0,30) = 0 s
00:00:00,45 0(0,45) - 0(0,30) = 0 s
Trx2 00:00:00,90 00:00:01,10 00:00:00,95 0(0,95) - 0(0,90) = 0 s
00:00:01,05 1(1,05) - 0(0,90) = 1 s

Définissez le seuil d'alerte pour la latence de lecture sur une valeur supérieure à 1 seconde afin d'éviter les fausses alarmes.

Latence > 1 seconde : identification et résolution de la cause

Une latence soutenue supérieure à 1 seconde nécessite une investigation. Les sections suivantes détaillent les cinq causes les plus fréquentes, expliquent comment les confirmer et fournissent les étapes de résolution.

Important

Avant d'apporter des modifications de configuration, telles que la modification des spécifications de l'instance ou des données, créez un snapshot ou activez la sauvegarde des journaux pour protéger vos données. Si vous avez accordé des autorisations sur des informations sensibles ou soumis des informations sensibles dans la console Alibaba Cloud Management Console, nous vous recommandons de modifier ces informations sensibles dès que possible. Les informations sensibles incluent les noms d'utilisateur et les mots de passe.

Cause 1 : Spécifications insuffisantes de l'instance en lecture seule

Mécanisme. La réplication utilise un thread I/O (pour récupérer les journaux binaires depuis l'instance principale) et un thread SQL (pour les appliquer localement). Ces deux threads entrent en concurrence pour les ressources I/O, y compris les opérations d'entrée/sortie par seconde (IOPS). Si l'instance en lecture seule ne peut pas maintenir les IOPS requis, elle prend du retard.

Confirmation. Dans la console ApsaraDB RDS, accédez à la section Monitoring and Alerts de l'instance en lecture seule. Vérifiez si l'utilisation du CPU, l'utilisation de la mémoire, la bande passante I/O ou les IOPS atteignent constamment leurs limites. Vous pouvez également consulter le type d'instance dans la section Configuration Information de la page Basic Information. Pour plus d'informations, consultez les rubriques Types d'instances pour les instances en lecture seule ApsaraDB RDS for MySQL (x86) et Types d'instances pour les instances en lecture seule ApsaraDB RDS for MySQL (ARM).

Résolution. Mettez à niveau l'instance en lecture seule vers des spécifications égales ou supérieures à celles de l'instance principale. Pour plus d'informations, consultez la rubrique Modifier les spécifications d'une instance ApsaraDB RDS for MySQL.

Cause 2 : Nombre élevé de transactions par seconde (TPS) sur l'instance principale

Mécanisme. Un seul thread SQL applique toutes les transactions répliquées sur l'instance en lecture seule de manière séquentielle. Si l'instance principale traite un volume élevé d'écritures simultanées, l'instance en lecture seule ne parvient pas à suivre le rythme.

Confirmation. Accédez à la page Dashboard de l'instance principale ou de l'instance en lecture seule et vérifiez la métrique TPS. Pour plus d'informations, consultez la rubrique Utiliser la fonctionnalité de tableau de bord pour une instance ApsaraDB RDS for MySQL.

Résolution. Optimisez ou divisez les transactions volumineuses sur l'instance principale afin de réduire le volume d'écriture par transaction et de raccourcir la durée pendant laquelle chaque transaction occupe le thread SQL.

Cause 3 : Transactions volumineuses sur l'instance principale

Mécanisme. Les opérations telles que UPDATE, DELETE, INSERT...SELECT et REPLACE...SELECT effectuées sur de grands volumes de données génèrent des entrées de journal binaire volumineuses. L'instance en lecture seule doit consacrer le même temps à l'application de la transaction que l'instance principale à son exécution. Par exemple, une suppression qui prend 80 secondes sur l'instance principale prend également 80 secondes à être répliquée.

De plus, bien que les transactions simultanées sur plusieurs tables soient prises en charge, un seul thread réplique les transactions sur une table donnée à la fois, ce qui peut amplifier le délai.

Confirmation. Exécutez SHOW SLAVE STATUS \G sur l'instance en lecture seule et observez si Seconds_Behind_Master augmente continuellement tandis que Exec_Master_Log_Pos reste identique. Exécutez ensuite SHOW PROCESSLIST pour identifier le thread SQL spécifique. Si la journalisation binaire est configurée au format ROW, vérifiez si un fichier de journal binaire dépasse le seuil max_binlog_size :

SHOW BINARY LOGS;

Si File_size dépasse max_binlog_size, les transactions volumineuses sont probablement la cause.

Vérifiez également les contentions de verrous de métadonnées (MDL) en examinant la sortie de SHOW SLAVE STATUS \G pour détecter les états d'attente de verrou.

Résolution. Divisez les transactions volumineuses en lots plus petits. Par exemple, ajoutez une clause WHERE avec une limite de lignes aux instructions DELETE afin que chaque lot traite un nombre gérable de lignes, permettant ainsi à l'instance en lecture seule de suivre le rythme.

Cause 4 : Opérations DDL de longue durée sur l'instance principale

Mécanisme. La réplication applique les instructions Data Definition Language (DDL) de manière séquentielle. Une opération DDL sur une grande table, telle que CREATE INDEX, ALTER TABLE ADD COLUMN ou REPAIR TABLE, peut bloquer toute la réplication suivante jusqu'à sa terminaison. Les requêtes lentes générant un grand nombre de tables temporaires aggravent le problème en consommant des E/S disque.

Par ailleurs, les requêtes en cours ou les transactions ouvertes sur l'instance en lecture seule peuvent créer une contention MDL qui bloque les instructions DDL arrivant depuis l'instance principale.

Confirmation.

  • Vérifiez si les fichiers de journaux binaires s'accumulent sans être tronqués, ce qui indique un arriéré DDL.

  • Exécutez l'instruction suivante sur l'instance en lecture seule pour vérifier la contention de verrous :

    SHOW ENGINE INNODB STATUS \G
  • Exécutez l'instruction suivante pour identifier les tables actuellement utilisées :

    SHOW OPEN TABLES;

    Les tables avec in_use = 1 sont verrouillées et peuvent bloquer la réplication.

  • Consultez les journaux de requêtes lentes pour les opérations liées aux DDL, telles que OPTIMIZE, ALTER, REPAIR et CREATE. Pour plus d'informations, consultez la rubrique Analyse des journaux de requêtes lentes.

Résolution.

Si une instruction DDL provenant de l'instance principale est bloquée par un verrou de métadonnées sur l'instance en lecture seule :

  1. Exécutez SHOW PROCESSLIST; sur l'instance en lecture seule pour trouver le thread SQL en attente d'un verrou de métadonnées.

  2. Terminez la session détenant le verrou pour reprendre la réplication. Pour plus d'informations, consultez la rubrique Utiliser DMS pour libérer les verrous de métadonnées.

Cause 5 : Table avec un index unique mais sans clé primaire

Mécanisme. Lorsqu'une table n'a pas de clé primaire et possède uniquement un index unique contenant des valeurs NULL, le thread SQL de réplication utilise le plan d'exécution de l'index unique au lieu du plan préféré par l'optimiseur, même si une clause WHERE permettrait autrement une recherche plus efficace. Cela force des analyses complètes de la table lors de la réplication, augmentant considérablement les lectures logiques et ralentissant le thread SQL.

Confirmation. Exécutez la requête suivante sur l'instance principale pour identifier les tables sans clé primaire :

SELECT tab.table_schema AS database_name, tab.table_name
FROM information_schema.tables tab
LEFT JOIN information_schema.table_constraints tco
  ON tab.table_schema = tco.table_schema
  AND tab.table_name = tco.table_name
  AND tco.constraint_type = 'PRIMARY KEY'
WHERE tco.constraint_type IS NULL
  AND tab.table_schema NOT IN ('mysql', 'information_schema', 'performance_schema', 'sys')
  AND tab.table_type = 'BASE TABLE'
ORDER BY tab.table_schema, tab.table_name;

Pour les tables renvoyées par la requête, utilisez la vue sys.schema_index_statistics pour confirmer si l'index unique contient des valeurs NULL.

Résolution. Ajoutez une clé primaire explicite à toute table qui en est dépourvue.

FAQ

Pourquoi une latence de 1 seconde apparaît-elle sur certaines instances en lecture seule mais pas sur d'autres ?

Chaque instance en lecture seule démarre ses procédures de collecte à un moment légèrement différent. Si un point d'échantillonnage franchit une limite de seconde, une latence de 1 seconde est signalée ; sinon, la latence est indiquée comme étant de 0 seconde. Il s'agit d'un artefact de mesure et non d'une différence réelle de performance de réplication. Pour plus de détails, consultez la section Latence <= 1 seconde : quand l'ignorer.

Une latence de 1 seconde signifie-t-elle que mon instance est affectée ?

Non. Une latence signalée de 1 seconde ne signifie pas qu'un décalage réel s'est produit. La valeur reflète un arrondi de calcul plutôt qu'un véritable délai de synchronisation. Définissez le seuil de latence de lecture pour votre proxy ou votre alerte sur une valeur supérieure à 1 seconde afin de filtrer ces faux positifs.

Que faire lorsque l'erreur ReplicationInterrupted s'affiche ou lorsqu'une alerte Slave_SQL_Running ou Slave_IO_Running est déclenchée ?

Vérifiez les points suivants dans l'ordre :

  1. Capacité de stockage. Si l'instance en lecture seule manque d'espace de stockage, elle ne peut pas écrire les journaux binaires entrants. Vérifiez l'utilisation du stockage dans la section Usage Statistics de la page Basic Information.

  2. Latence de réplication. Si la latence dépasse continuellement 5 secondes sur une fenêtre de 5 minutes, une alerte est déclenchée. Un volume d'écriture élevé ou des transactions volumineuses sur l'instance principale en sont la cause la plus probable. Pour afficher la latence actuelle, accédez à Monitoring and Alerts > Standard Monitoring et vérifiez la métrique Replication Latency of Secondary Instances(second).

  3. Journaux de requêtes lentes. Les requêtes lentes sur l'instance en lecture seule dégradent les performances du thread SQL et peuvent amplifier le décalage de réplication. Consultez les journaux sous Logs > Slow Query Logs, ou accédez à Autonomy Services > Slow Query Logs.

Si aucun des éléments ci-dessus ne s'applique, le système détecte et résout automatiquement l'interruption de la réplication.