Comment résoudre les problèmes de latence des volumes Amazon EBS causée par un goulot d'étranglement IOPS dans mon instance Amazon RDS ?

Date de la dernière mise à jour : 11/10/2021

J'ai une instance de base de données Amazon Relational Database Service (Amazon RDS). Je souhaite résoudre les problèmes de latence des volumes Amazon Elastic Block Store (Amazon EBS) dans mon instance Amazon RDS.

Solution

Les raisons les plus courantes de latence dans une instance Amazon RDS causée par un goulot d'étranglement IOPS ou de débit sont les suivantes :

  • Un goulot d'étranglement IOPS au niveau de l'instance
  • Un goulot d'étranglement IOPS au niveau du volume
  • Un goulot d'étranglement de débit au niveau de l'instance
  • Un goulot d'étranglement de débit au niveau du volume
  • Micro-bursting

Suivez les étapes de dépannage suivantes en fonction de votre cas d'utilisation.

Instance RDS avec SSD à usage général (gp2)

Effectuez les vérifications suivantes :

  1. Vérifiez les informations de configuration de l'instance Amazon RDS, telles que la classe d'instance de base de données et la taille de stockage. Ces informations peuvent vous aider à suivre les limites IOPS et de débit. Vous devez connaître ces valeurs lorsque vous résolvez des problèmes entraînant un goulot d'étranglement IOPS ou de débit.
  2. Utilisez les graphiques Amazon CloudWatch pour vérifier les pics des valeurs de DiskQueueDepth, ReadLatency et WriteLatency. Dans des circonstances normales, il est recommandé d'utiliser une profondeur DiskQueueDepth d'une par minute pour 1 000 IOPS. Les valeurs ReadLatency et WriteLatency devraient être inférieures à 10 millisecondes. Si vous remarquez des pics, identifiez l'heure du pic.
  3. Utilisez les graphiques CloudWatch pour afficher les métriques ReadIOPS et WriteIOPS. Vérifiez si la limite IOPS a été dépassée au niveau du volume pendant la période des pics des valeurs de DiskQueueDepth, ReadLatency et WriteLatency.
  4. Utilisez le graphique CloudWatch pour vérifier s'il y a une baisse de la valeur de BurstBalance. Cette vérification s'applique uniquement aux volumes dont la taille est inférieure à 1 To. Une baisse de la valeur de BurstBalance confirme l'apparition d'un goulot d'étranglement IOPS pendant la période du pic.
  5. Utilisez les graphiques CloudWatch pour afficher les métriques ReadThroughput et WriteThroughput. Vérifiez si la limite de débit a été dépassée au niveau du volume pendant la période des pics des valeurs ReadThroughput et WriteThroughput.
  6. Si vous utilisez une classe d'instance RDS optimisée pour EBS, utilisez les graphiques CloudWatch pour vérifier les limitations des IOPS ou du débit. Pour les classes d'instance avec une capacité de débordement, affichez les métriques EBSIOBalance% et EBSByteBalance% dans les graphiques CloudWatch. Des valeurs toujours faibles de EBSIOBalance% ou EBSByteBalance% indiquent un goulot d'étranglement IOPS ou de débit au niveau de l'instance.

La limitation des IOPS, du débit ou des deux indique que les IOPS ou le débit sont insuffisants pour votre charge de travail au niveau du stockage. Pour résoudre ce problème, procédez comme suit :

  • Recherchez les requêtes SQL qui créent une charge supplémentaire sur la base de données, puis optimisez ces requêtes. Si la charge de travail est telle que prévue, ou si le réglage des requêtes SQL n'est pas possible, vous devrez peut-être augmenter la taille du stockage pour obtenir une capacité d'IOPS supérieure.
    Remarque : après avoir augmenté la taille de stockage d'une instance RDS, vous ne pouvez pas la réduire à la valeur précédente.
  • Pensez à basculer le volume de General Purpose (gp2) vers IOPS Provisionnés (io1). Si l'instance de base de données est Single-AZ et que vous utilisez un groupe de paramètres personnalisé, le basculement entre gp2 et io1 peut entraîner un bref temps d'arrêt. Si votre instance est Multi-AZ, vous ne subissez aucun temps d'arrêt.
  • Si vous constatez une limitation des IOPS ou du débit au niveau de l'instance, vous devez augmenter la classe d'instance pour obtenir une capacité d'IOPS ou de débit supérieure.

Instance RDS avec IOPS provisionnés (io1)

  1. Vérifiez les informations de configuration de l'instance Amazon RDS, telles que la classe d'instance de base de données et les IOPS provisionnés définies, pour déterminer la limite IOPS ou la limite de débit pour la classe d'instance de base de données.
  2. Utilisez les graphiques CloudWatch pour vérifier s'il y a des pics dans les valeurs de DiskQueueDepth, ReadLatency et WriteLatency. Dans des circonstances normales, il est recommandé d'utiliser une profondeur DiskQueueDepth d'une par minute pour 1 000 IOPS. ReadLatency ou WriteLatency devraient être inférieures à 10 millisecondes. Si vous remarquez des pics, identifiez l'heure du pic.
  3. Utilisez les graphiques CloudWatch pour afficher les métriques ReadIOPS et WriteIOPS. Vérifiez si la limite IOPS a été dépassée pendant la période de pics des valeurs de DiskQueueDepth, ReadLatency et WriteLatency.
  4. Utilisez les graphiques CloudWatch pour afficher les métriques ReadThroughput et WriteThroughput. Vérifiez si la limite de débit a été dépassée pendant la période de pics des valeurs de ReadThroughput et WriteThroughput.
  5. Si vous utilisez une classe d'instance RDS optimisée pour EBS, utilisez les graphiques CloudWatch pour vérifier les limitations des IOPS ou du débit. Pour les classes d'instance avec une capacité de débordement, affichez les métriques EBSIOBalance% et EBSByteBalance% dans les graphiques CloudWatch. Des valeurs de pourcentage toujours faibles de EBSIOBalance% ou EBSByteBalance% indiquent respectivement un goulot d'étranglement IOPS ou de débit au niveau de l'instance.

La limitation des IOPS ou du débit indique que les IOPS ou le débit sont insuffisants pour la charge de travail au niveau du stockage. Pour résoudre ce problème, procédez comme suit :

  • Recherchez les requêtes SQL qui créent une charge supplémentaire sur la base de données, puis optimisez ces requêtes. Si la charge de travail est telle que prévue ou que le réglage des requêtes SQL n’est pas possible, vous devrez peut-être augmenter les IOPS provisionnés.
  • Si vous constatez une limitation des IOPS ou du débit au niveau de l'instance, vous devez augmenter la classe d'instance pour obtenir un débit ou une capacité d'IOPS plus élevés.

Micro-bursting

Le micro-bursting se produit lorsqu'un volume EBS transmet (« bursts ») un IOPS ou un débit élevé sur des périodes significativement plus courtes que celle de collecte. Les métriques CloudWatch sont collectées à un intervalle de 60 secondes. Étant donné que le volume transmet des IOPS ou un débit élevé pendant une période plus courte que la période de collecte, CloudWatch ne renseigne pas sur le bursting. Vous pouvez utiliser la surveillance améliorée pour déterminer si le micro-bursting est à l'origine de la latence. Activez la surveillance améliorée avec une granularité d'une seconde. Vous pouvez utiliser les métriques Read IO/s et Write IO/s pour déterminer l'utilisation réelle des IOPS. Vous pouvez utiliser les métriques Read Kb/s et Write Kb/s pour déterminer l'utilisation réelle du débit par seconde. Pour plus d'informations, consultez la section Description des métriques de surveillance améliorée.