cpu - Amazon Aurora

cpu

Das cpu-Warteereignis tritt auf, wenn ein Thread in der CPU aktiv ist oder auf die CPU wartet.

Unterstützte Engine-Versionen

Diese Warteereignisinformationen werden für die folgenden Engine-Versionen unterstützt:

  • Aurora-MySQL-Versionen 2 und 3

Kontext

Für jede vCPU kann eine Verbindung an dieser CPU arbeiten. In einigen Situationen ist die Anzahl der aktiven Verbindungen, die zum Ausführen bereit sind, höher als die Anzahl der vCPUs. Dieses Ungleichgewicht führt dazu, dass Verbindungen auf CPU-Ressourcen warten. Wenn die Anzahl der aktiven Verbindungen konstant höher bleibt als die Anzahl der vCPUs, erfährt Ihre Instance CPU-Konflikte. Der Konflikt bewirkt, dass das cpu-Warteereignis auftritt.

Anmerkung

Die Performance-Insights-Metrik für CPU ist DBLoadCPU. Der Wert für DBLoadCPU kann vom Wert für die CloudWatch-Metrik CPUUtilization abweichen. Die letztere Metrik wird vom HyperVisor für eine Datenbank-Instance gesammelt.

Performance-Insights-OS-Metriken liefern detaillierte Informationen zur CPU-Auslastung. Sie können beispielsweise die folgenden Metriken anzeigen:

  • os.cpuUtilization.nice.avg

  • os.cpuUtilization.total.avg

  • os.cpuUtilization.wait.avg

  • os.cpuUtilization.idle.avg

Performance Insights meldet die CPU-Auslastung durch die Datenbank-Engine als os.cpuUtilization.nice.avg.

Wahrscheinliche Ursachen für erhöhte Wartezeiten

Wenn das Ereignis mehr als normal auftritt, was möglicherweise auf ein Leistungsproblem hinweist, sind die folgenden typischen Ursachen:

  • Analytische Abfragen

  • Hochgradig gleichzeitige Transaktionen

  • Langlebige Transaktionen

  • Ein plötzlicher Anstieg der Anzahl von Verbindungen, bekannt als Login-Sturm

  • Eine Zunahme des Kontextwechsels

Aktionen

Wenn das cpu-Wait-Ereignis die Datenbankaktivität dominiert, weist dies nicht unbedingt auf ein Leistungsproblem hin. Reagieren Sie auf dieses Ereignis nur, wenn sich die Leistung verschlechtert.

Berücksichtigen Sie je nach Ursache des Anstiegs der CPU-Auslastung die folgenden Strategien:

  • Erhöht die CPU-Kapazität des Hosts. Dieser Ansatz bietet normalerweise nur vorübergehende Erleichterung.

  • Identifizieren Sie Top-Abfragen zur möglichen Optimierung.

  • Leiten Sie ggf. einen schreibgeschützten Workload auf Reader-Knoten um.

Identifizieren Sie die Sitzungen oder Abfragen, die das Problem verursachen

Um die Sitzungen und Abfragen zu finden, suchen Sie in der Top-SQL-Tabelle in Performance Insights nach den SQL-Anweisungen mit der höchsten CPU-Auslastung. Weitere Informationen finden Sie unter Analyse der Metriken mit dem Performance-Insights-Dashboard.

In der Regel verbrauchen ein oder zwei SQL-Anweisungen den Großteil der CPU-Zyklen. Konzentrieren Sie sich auf diese Anweisungen. Angenommen, Ihre DB-Instance verfügt über 2 vCPUs mit einer DB-Last von 3,1 durchschnittlichen aktiven Sitzungen (AAS), alle im CPU-Status. In diesem Fall ist Ihre Instance CPU-gebunden. Berücksichtigen Sie dabei die folgenden Strategien:

  • Aktualisieren Sie auf eine größere Instance-Klasse mit mehr vCPUs.

  • Stimmen Sie Ihre Abfragen auf eine geringere CPU-Last ein.

In diesem Beispiel haben die obersten SQL-Abfragen eine DB-Last von 1,5 AAS, alle im CPU-Status. Eine andere SQL-Anweisung hat eine Last von 0,1 im CPU-Status. Wenn Sie in diesem Beispiel die SQL-Anweisung mit der niedrigsten Last gestoppt haben, reduzieren Sie die Datenbanklast nicht wesentlich. Optimieren Sie jedoch die beiden Abfragen mit hoher Last, um doppelt so effizient zu sein, beseitigen Sie den CPU-Engpass. Wenn Sie die CPU-Last von 1,5 AAS um 50 Prozent reduzieren, verringert sich der AAS für jede Anweisung auf 0,75. Die gesamte für die CPU aufgewendete DB-Last beträgt jetzt 1,6 AAS. Dieser Wert liegt unter der maximalen vCPU-Linie von 2,0.

Eine nützliche Übersicht über die Fehlerbehebung mit Performance Insights finden Sie im Blogbeitrag Analysieren Sie Amazon Aurora MySQL Workloads mit Performance Insights. Siehe auch den AWS-Support-Artikel Wie kann ich eine hohe CPU-Auslastung auf meinen Amazon RDS for MySQL-Instances beheben und beheben?.

Analysieren und optimieren Sie die hohe CPU-Workload

Nachdem Sie die Abfrage oder Abfragen identifiziert haben, die die CPU-Auslastung erhöhen, können Sie sie entweder optimieren oder die Verbindung beenden. Das folgende Beispiel zeigt, wie Sie eine Verbindung beenden.

CALL mysql.rds_kill(processID);

Weitere Informationen finden Sie unter mysql.rds_kill.

Wenn Sie eine Sitzung beenden, löst die Aktion möglicherweise einen langen Rollback aus.

Befolgen Sie die Richtlinien für die Optimierung von Abfragen

Beachten Sie die folgenden Richtlinien, um Abfragen zu optimieren:

  • Ausführen der EXPLAIN-Anweisung.

    Dieser Befehl zeigt die einzelnen Schritte an, die beim Ausführen einer Abfrage beteiligt sind. Weitere Informationen finden Sie unter Optimierung von Abfragen mit EXPLAIN in der MySQL-Dokumentation.

  • Ausführen der SHOW PROFILE-Anweisung.

    Verwenden Sie diese Anweisung, um Profildetails zu überprüfen, die die Ressourcennutzung für Anweisungen angeben können, die während der aktuellen Sitzung ausgeführt werden. Weitere Informationen finden Sie unter SHOW PROFILE-Anweisung in der MySQL-Dokumentation.

  • Ausführen der ANALYZE TABLE-Anweisung.

    Verwenden Sie diese Anweisung, um die Indexstatistiken für die Tabellen zu aktualisieren, auf die die Abfrage mit hohem CPU-Verbrauch zugegriffen wird. Durch die Analyse der Anweisung können Sie dem Optimierer bei der Auswahl eines geeigneten Ausführungsplans helfen. Weitere Informationen finden Sie unter ANALYZE TABLE in der MySQL-Dokumentation.

Befolgen Sie die Richtlinien zur Verbesserung der CPU-Auslastung

Um die CPU-Auslastung in einer Datenbank-Instance zu verbessern, befolgen Sie die folgenden Richtlinien:

  • Stellen Sie sicher, dass alle Abfragen die richtigen Indizes verwenden.

  • Finden Sie heraus, ob Sie parallele Aurora-Abfragen verwenden können. Sie können diese Technik verwenden, um die CPU-Auslastung auf dem Hauptknoten zu reduzieren, indem Sie die Funktionsverarbeitung, die Zeilenfilterung und die Spaltenprojektion für die WHERE-Klausel herabstufen.

  • Finden Sie heraus, ob die Anzahl der SQL-Ausführungen pro Sekunde die erwarteten Schwellenwerte erfüllt.

  • Finden Sie heraus, ob Indexwartung oder neue Indexerstellung CPU-Zyklen in Anspruch nehmen, die von Ihrer Produktions-Workload benötigt werden Planen Sie Wartungsaktivitäten außerhalb der Spitzenzeiten.

  • Finden Sie heraus, ob Sie die Partitionierung verwenden können, um den Abfragedatensatz zu reduzieren. Weitere Informationen finden Sie im Blogbeitrag So planen und optimieren Sie Amazon Aurora mit MySQL-Kompatibilität für konsolidierte Workloads.

Auf Verbindungsströme überprüfen

Ist die DBLoadCPU-Metrik nicht sehr hoch, aber die CPUUtilization-Metrik hoch, liegt die Ursache für die hohe CPU-Auslastung außerhalb der Datenbank-Engine. Ein klassisches Beispiel ist ein Verbindungssturm.

Prüfen Sie, ob die folgenden Bedingungen zutreffen:

  • Sowohl die Performance-Insights-CPUUtilization-Metrik als auch die Amazon-CloudWatch-DatabaseConnections-Metrik sind gestiegen.

  • Die Anzahl der Threads in der CPU ist größer als die Anzahl der vCPUs.

Wenn die vorhergehenden Bedingungen zutreffen, sollten Sie erwägen, die Anzahl der Datenbankverbindungen zu verringern. Sie können beispielsweise einen Verbindungspool wie RDS-Proxy verwenden. Informationen zu den bewährten Methoden für eine effektive Verbindungsverwaltung und -skalierung finden Sie im Whitepaper Handbuch von Amazon Aurora MySQL DBA für Verbindungsverwaltung.