Wie behebe ich Fehler der Latenz von Amazon-EBS-Volumes, die durch einen IOPS-Engpass in meiner Amazon-RDS-Instance verursacht wird?

Letzte Aktualisierung: 11.10.2021

Ich habe eine Amazon-Relational-Database-Service-DB-Instance (Amazon RDS). Ich möchte die Latenz der Amazon-Elastic-Block-Store-Volumes (Amazon EBS) in meiner Amazon-RDS-Instance beheben.

Auflösung

Zu den häufigsten Gründen für die Latenz in einer Amazon-RDS-Instance, die durch einen IOPS oder einen Durchsatzengpass verursacht wird, gehören die folgenden:

  • Ein IOPS-Engpass auf Instance-Ebene
  • Ein IOPS-Engpass bei Lautstärke
  • Ein Durchsatzengpass auf Instance-Ebene
  • Ein Durchsatzengpass auf Lautstärkepegel
  • Mikro-Bursting

Verwenden Sie die folgenden Schritte zur Fehlerbehebung basierend auf Ihrem Anwendungsfall.

RDS-Instance mit Allzweck-SSD (gp2)

Führen Sie die folgenden Prüfungen durch:

  1. Überprüfen Sie die Konfigurationsinformationen der Amazon-RDS-Instance, z. B. die DB-Instance-Klasse und die Speichergröße. Diese Informationen können Ihnen helfen, die IOPS und Durchsatzlimits zu verfolgen. Sie müssen diese Werte kennen, wenn Sie Probleme beheben, die einen IOPS oder Durchsatzengpass verursachen.
  2. Verwenden Sie die Amazon-CloudWatch-Diagramme, um nach Spitzen in den Werten von DiskQueueDepth,ReadLatency und WriteLatency zu suchen. Unter normalen Umständen empfiehlt es sich, eine DiskQueueDepth von einem pro Minute pro 1000 IOPS zu verwenden. ReadLatency und WriteLatency werden voraussichtlich weniger als 10 Millisekunden betragen. Wenn Sie Spitzen bemerken, identifizieren Sie den Zeitpunkt der Spitze.
  3. Verwenden Sie die CloudWatch-Diagramme, um die ReadIOPS- und WriteIOPS-Metriken anzuzeigen. Prüfen Sie, ob das IOPS-Limit während des Zeitraums der Spitzen in den Werten von DiskQueueDepth, ReadLatency und WriteLatency auf Lautstärke überschritten wurde.
  4. Verwenden Sie das CloudWatch-Diagramm, um zu überprüfen, ob der Wert von BurstBalance sinkt. Diese Prüfung gilt nur für Volumes mit einer Größe von weniger als 1 TB. Ein Wertverlust von BurstBalance bestätigt das Auftreten eines IOPS-Engpasses während des Zeitraums des Anstiegs.
  5. Verwenden Sie die CloudWatch-Diagramme, um die Metriken ReadThroughput und WriteThroughput anzuzeigen. Überprüfen Sie, ob die Durchsatzgrenze während des Zeitraums der Spitzen in den Werten von ReadThroughput und WriteThroughput auf Lautstärke überschritten wurde.
  6. Wenn Sie eine EBS-optimierte RDS-Instance-Klasse verwenden, verwenden Sie die CloudWatch-Diagramme, um nach einer Drosselung von IOPS oder Durchsatz zu suchen. Zeigen Sie für Instance-Klassen mit Burst-Kapazität die Metriken EBSIOBalance% und EBSByteBalance% in den CloudWatch-Diagrammen an. Gleichbleibend niedrige Werte von EBSIOBalance% oder EBSByteBalance% deuten auf einen IOPS- oder Durchsatzengpass auf Instance-Ebene hin.

Die Drosselung von IOPS, Durchsatz oder beidem zeigt an, dass der IOPS oder der Durchsatz für Ihre Arbeitslast auf Speicherebene unzureichend ist. Gehen Sie wie folgt vor, um dieses Problem zu beheben:

  • Suchen Sie die SQL-Abfragen, die die Datenbank stärker belasten, und optimieren Sie dann diese Abfragen. Wenn die Arbeitslast wie erwartet ist oder kein Spielraum für die Optimierung der SQL-Abfragen besteht, müssen Sie möglicherweise die Speichergröße erhöhen, um eine höhere IOPS-Kapazität zu erhalten.
    Hinweis: Nachdem Sie die Speichergröße einer RDS-Instance erhöht haben, können Sie die Größe nicht auf den vorherigen Wert reduzieren.
  • Erwägen Sie, das Volume von General Purpose (gp2) auf Provisioned IOPS (io1) umzustellen. Wenn die DB-Instance Single-AZ ist und Sie eine benutzerdefinierte Parametergruppe verwenden, kann das Umschalten zwischen gp2 und io1 zu kurzen Ausfallzeiten führen. Wenn es sich bei Ihrer Instance um Multi-AZ handelt, kommt es zu keinen Ausfallzeiten.
  • Wenn Sie eine Drosselung von IOPS oder Durchsatz auf Instance-Ebene bemerken, müssen Sie die Instance-Klasse hochskalieren, um eine höhere IOPS- oder Durchsatzkapazität zu erhalten.

RDS-Instance mit bereitgestellten IOPS (io1)

  1. Überprüfen Sie die Konfigurationsinformationen der Amazon-RDS-Instance, wie die DB-Instance-Klasse und definierte bereitgestellte IOPS, um das IOPS-Limit oder Durchsatzlimit für die DB-Instance-Klasse zu ermitteln.
  2. Verwenden Sie die CloudWatch-Diagramme, um nach Spitzen in den Werten von DiskQueueDepth, ReadLatency und WriteLatency zu suchen. Unter normalen Umständen empfiehlt es sich, eine DiskQueueDepth von einem pro Minute pro 1000 IOPS zu verwenden. ReadLatency oder WriteLatency werden voraussichtlich innerhalb von 10 Millisekunden liegen. Wenn Sie Spitzen bemerken, identifizieren Sie den Zeitpunkt der Spitze.
  3. Verwenden Sie die CloudWatch-Diagramme, um die ReadIOPS- und WriteIOPS-Metriken anzuzeigen. Überprüfen Sie, ob das IOPS-Limit während des Zeitraums von Spitzen in den Werten von DiskQueueDepth, ReadLatency und WriteLatency überschritten wurde.
  4. Verwenden Sie die CloudWatch-Diagramme, um die Metriken ReadThroughput und WriteThroughput anzuzeigen. Überprüfen Sie, ob die Durchsatzgrenze während des Zeitraums von Spitzen in den Werten von ReadThroughput und WriteThroughput überschritten wurde.
  5. Wenn Sie eine EBS-optimierte RDS-Instance-Klasse verwenden, verwenden Sie die CloudWatch-Diagramme, um nach einer Drosselung von IOPS oder Durchsatz zu suchen. Zeigen Sie für Instance-Klassen mit Burst-Kapazität die Metriken EBSIOBalance% und EBSByteBalance% in den CloudWatch-Diagrammen an. Gleichbleibend niedrige Prozentwerte von EBSIOBalance% bzw. EBSByteBalance% deuten auf einen IOPS- oder Durchsatzengpass auf Instance-Ebene hin.

Die Drosselung von IOPS oder Durchsatz zeigt an, dass der IOPS oder der Durchsatz für die Arbeitslast auf Speicherebene unzureichend ist. Gehen Sie wie folgt vor, um dieses Problem zu beheben:

  • Suchen Sie die SQL-Abfragen, die die Datenbank stärker belasten, und optimieren Sie dann diese Abfragen. Wenn die Arbeitslast wie erwartet ist oder kein Spielraum für die Optimierung der SQL-Abfragen besteht, müssen Sie möglicherweise die bereitgestellten IOPS erhöhen.
  • Wenn Sie eine Drosselung von IOPS oder Durchsatz auf Instance-Ebene bemerken, müssen Sie die Instance-Klasse hochskalieren, um einen höheren Durchsatz oder eine höhere IOPS-Kapazität zu erhalten.

Mikro-Bursting

Mikro-Bursting tritt auf, wenn ein EBS-Volume einen hohen IOPS oder Durchsatz für deutlich kürzere Zeiträume als den Erfassungszeitraum „platzt“. CloudWatch-Metriken werden in einem Intervall von 60 Sekunden gesammelt. Da das Volume für eine kürzere Zeit als den Erfassungszeitraum hohe IOPS oder Durchsatz aufweist, spiegelt CloudWatch das Bursting nicht wider. Sie können Enhanced Monitoring verwenden, um festzustellen, ob Microbursting die Latenz verursacht. Schalten Sie die erweiterte Überwachung mit einer Granularität von 1 Sekunde ein. Sie können die Read IO/s- und Write IO/S-Metriken verwenden, um die tatsächliche IOPS-Auslastung zu ermitteln. Sie können die Read KB/s und Write KB/s verwenden, um die tatsächliche Durchsatzauslastung pro Sekunde zu ermitteln. Weitere Informationen finden Sie unter Metrikbeschreibungen für erweiterte Überwachung.