Instanzspezifische Leistungs- und Ressourcenüberwachung - Amazon Aurora

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Instanzspezifische Leistungs- und Ressourcenüberwachung

Die Überwachung auf Instanzebene ist entscheidend, um Verbindungsverzerrungen, Workload- und Datenverzerrungen zu verstehen und zu verstehen, wann Router oder Split-Shards hinzugefügt werden müssen, um einen höheren Durchsatz bei gleichbleibender Latenz zu erreichen.

-Übersicht

Wenn Ihre Anwendung eine Anfrage gegen ausgibt, durchläuft diese Anfrage ein ausgeklügeltes verteiltes System, bevor Ergebnisse zurückgegeben werden. Eine scheinbar einfache SELECT Anweisung kann mehrere Datenbankinstanzen betreffen, von denen jede eine unterschiedliche Rolle bei der Verarbeitung Ihrer Anfrage spielt. Das Verständnis dieser Entwicklung — und der Instanzen, die sie ermöglichen — verändert die Art und Weise, wie Sie Anwendungen entwerfen, Überwachungsdaten interpretieren und Leistungsprobleme diagnostizieren.

Dieser Leitfaden bietet tiefe technische Einblicke in die Instance-Architektur:

  • Unbegrenzter Architektur-Refresher, Router und Shards

  • Wann und wie können Sie die einzelnen Instance-Typen skalieren, um Ihre Leistungs- und Kapazitätsanforderungen zu erfüllen

  • Wie können Sie die Leistung auf Instanzebene überwachen, Fehler beheben und optimieren

  • Bewährte Methoden für das Anwendungsdesign, das die verteilte Architektur effektiv nutzt

Grundlagen der Instanzarchitektur

erreicht horizontale Skalierbarkeit durch funktionale Trennung zwischen zwei spezialisierten Instance-Typen:

  • Router-Instanzen stellen die Orchestrierungsebene bereit — sie akzeptieren Client-Verbindungen, analysieren Abfragen, koordinieren verteilte Operationen und aggregieren Ergebnisse. Router sind zustandslos, d. h. sie speichern keine Daten und können ohne Datenmigration hinzugefügt oder entfernt werden.

  • Shard-Instanzen stellen die Daten- und Rechenebene bereit — sie speichern Tabellendaten, führen Abfragen anhand lokaler Daten aus und wickeln Transaktionen ab. Shards sind statusbehaftet und besitzen jeweils eine bestimmte Teilmenge Ihrer Daten, die durch konsistentes Hashing bestimmt wird.

Diese Trennung ermöglicht es, Verbindungsverarbeitung, Abfragekoordination und Datenspeicherung unabhängig von Ihren Workload-Merkmalen zu skalieren.

Vergleich von Router und Shard

Merkmal Router-Instanzen Shard-Instanzen
Primäre Rolle Koordination und Verteilung von Abfragen Datenspeicherung und Ausführung von Abfragen
Status Staatenlos (keine Datenspeicherung) Zuständig (besitzt Daten)
Skalierbarkeit Sofort hinzufügen/entfernen Erfordert einen Datenausgleich
Fokus auf Ressourcen CPU für die Koordination; moderater Arbeitsspeicher CPU für Abfragen; hoher Arbeitsspeicher für den Cache
Trigger für Skalierung Hohe Verbindungsanzahl, verteilte TXN-Rate Hoher CPU-, Datenvolumen- und Abfragedurchsatz

Überwachung der Instance-Leistung

Für einen effektiven Betrieb ist es entscheidend, die Leistung auf Instanzebene zu verstehen. Die instanzspezifische Überwachung deckt die Verteilungsmuster auf, die sich auf die Leistung auswirken: Verbindungsverzerrungen, Workload-Verzerrungen und Datenverzerrungen.

Erkennung von Verzerrungen

Bei einer idealen Bereitstellung verteilen sich Arbeitslast und Ressourcen gleichmäßig auf die Instanzen. In der Praxis kommt es bei Anwendungen häufig zu Verzerrungen, d. h. einer ungleichmäßigen Verteilung, wodurch die Last auf bestimmte Instanzen konzentriert wird.

Es gibt drei Arten von Verzerrungen, die überwacht werden müssen:

  • Verbindungsverzerrung: Ungleichmäßige Verteilung der Client-Verbindungen auf die Router

  • Verzerrung der Arbeitslast: Ungleichmäßige Abfragelast zwischen verschiedenen Shards aufgrund von Hot-Shard-Keys

  • Datenverzerrung: Ungleichmäßiges Datenvolumen zwischen verschiedenen Shards aufgrund der Häufigkeit von Shard-Schlüsseln

Lastverteilung mit Database Insights

Die schnellste Methode zur Beurteilung des Zustands auf Instanzebene ist die Lastverteilungsansicht von Database Insights, die einen sofortigen Überblick darüber bietet, wie sich Active Sessions auf die Instances verteilen.

So greifen Sie auf Load Distribution zu:

  1. Navigieren Sie zu RDS Console → Your Limitless Cluster

  2. Wählen Sie den Tab „Performance Insights“

  3. Klicken Sie auf den Abschnitt „Lastverteilung“

Fehlerfreies Muster: Die Last ist relativ gleichmäßig auf die Instanzen verteilt

  • Router weisen möglicherweise einen etwas höheren AAS als Shards auf (Koordinationsaufwand)

  • Die AAS-Werte der Shards, die nicht mehr als 20% voneinander abweichen, deuten auf ein ausgewogenes Verhältnis hin

Bezüglich des Musters: Signifikante Konzentration auf bestimmte Fälle

  • Ein Router mit > 70% der Routerlast → Verbindungsverzerrung

  • Ein Shard mit > 50% der Shard-Last → Arbeitslast oder Datenversatz

  • Große Varianz zwischen Shards → Untersuchen Sie die Verteilung der Shard-Schlüssel

CloudWatch Metriken

CloudWatch Bietet für tiefere Analysen, die über Database Insights hinausgehen, instanzspezifische Metriken, die Muster der Ressourcennutzung aufzeigen.

Die ServerlessDatabaseCapacity Metrik mit Dimension DBShardGroupInstance zeigt den ACU-Verbrauch pro Instanz und bietet so den direktesten Überblick über die Ressourcennutzung.

Wann sollte Folgendes untersucht werden:

  • ACU-Varianz des Routers > 30% → Verbindungsverzerrung oder gemeinsame Workload-Konzentration

  • ACU-Varianz der Shared > 40% → Daten- oder Workload-Verzerrung

  • Jede Instanz hat konstant die maximale ACU → Kapazitätsbeschränkung

Router-Überwachung und Fehlerbehebung

Bei Routern können Leistungsprobleme hauptsächlich auf zwei Ursachen zurückzuführen sein: ungleichmäßige Verbindungsverteilung und Workload-Konzentration auf mehrere Shards.

Ungleichmäßig verteilte Sitzungen

Symptom: Ein Router verarbeitet einen unverhältnismäßigen Anteil an Verbindungen

Hauptursache: DNS-Caching führt dazu, dass mehrere Verbindungsanfragen auf denselben Router-Endpunkt aufgelöst werden.

Am häufigsten bei:

  • Benchmarking mit Tools wie pgbench

  • Initialisierung des Verbindungspools (viele Verbindungen wurden schnell hergestellt)

  • Der Anwendungsserver wird neu gestartet

Abhilfemaßnahmen

  • Stellen Sie sicher, dass Sie den in der Konsole angegebenen Limitless-Endpunkt verwenden

  • Manuelles Balancing: Extrahieren Sie Router-Endpunkte und verbinden Sie verschiedene Anwendungen mit verschiedenen Routern

  • Verwenden Sie für libpq-Anwendungen die Funktion LOADBALANCEHOSTS

  • Verwenden Sie für JDBC-Anwendungen das Limitless Connection Plugin

  • Verwenden Sie einen NLB, um Sitzungen und Verteilungen zu verwalten

Shard-Überwachung und Fehlerbehebung

Bei Shards treten Leistungsprobleme auf, die hauptsächlich auf drei Ursachen zurückzuführen sind: Ressourcenengpässe, Datenverzerrungen und Workload-Verzerrungen.

Nutzung von Shard-Ressourcen

Ein Shard mit beliebten Shard-Schlüsseln wird mehr Daten und eine höhere Arbeitslast haben. Dies äußert sich in einer Ressourcenauslastung, d. h. die Instanz wird mehr verbrauchen. ACUs

Strategien zur Problembehebung:

  1. Überprüfen Sie die Auswahl der Shard-Schlüssel erneut: Überprüfen Sie die Kardinalität und die Zugriffsmuster der Shard-Schlüssel. Ziehen Sie zur besseren Verteilung zusammengesetzte Shard-Schlüssel in Betracht.

  2. Teilen Sie den Shard auf: Verteilen Sie die Last auf mehrere Shard-Instanzen

Wann sollten Shards aufgeteilt werden:

  • Ein einzelner Shard liegt konstant bei einer maximalen ACU von > 80%

  • Der Abfragedurchsatz ist durch die Kapazität eines einzelnen Shards begrenzt

Shard-Datenvolumen

Verwenden Sie SQL-Funktionen, um Datenmengen abzufragen:

SELECT subcluster_id, subcluster_type, pg_size_pretty(db_size) FROM rds_aurora.limitless_stat_database_size('postgres_limitless') ORDER BY 1;

So zeigen Sie Daten pro Tabelle und pro Shard an:

SELECT * FROM rds_aurora.limitless_stat_relation_sizes('public', 'table_name');

Behebung einer ungleichmäßigen Auslastung

Wenn sich die Arbeitslast oder der Datenversatz auf bestimmte Shards konzentriert, wird durch die Aufteilung der Shards die Last auf mehrere Instanzen umverteilt.

Wichtige Überlegungen:

  • Welche Shard-Tasten verschoben werden sollen, kann nicht gesteuert werden

  • Es gibt keine Möglichkeit, einen Split rückgängig zu machen, ohne einen manuellen Snapshot wiederherzustellen, der vor dem Split erstellt wurde

  • Alle Instanzen, einschließlich eines neuen Shards, verbrauchen im Leerlauf mindestens die ACU der Instanz

Das Aufteilen von Shards ermöglicht eine weitere Skalierung, und aufeinanderfolgende Shard-Splits sind der Weg zu höherem Durchsatz und weiterer Skalierung bei gleichzeitiger Beibehaltung einer niedrigen Latenz.

Einschränkungen

Seien Sie sich dieser betrieblichen Einschränkungen bewusst:

Einschränkungen des Routers:

  • Router können nicht entfernt werden — Einmal hinzugefügt, verbleiben Router im Cluster

  • Planen Sie das Hinzufügen von Routern sorgfältig, um unnötige Grundkosten zu vermeiden

Einschränkungen bei Shards:

  • Shards können nicht zusammengeführt werden — Shard-Splits sind unidirektionale Operationen

  • Einzige Wiederherstellungsoption: Wiederherstellung aus einem Snapshot, der vor dem Teilen erstellt wurde

Strategien zur Schadensbegrenzung:

  • Beginnen Sie mit der Mindestanzahl brauchbarer Instanzen

  • Fügen Sie die Kapazität nach Bedarf schrittweise hinzu

  • Machen Sie Schnappschüsse, bevor größere Topologieänderungen vorgenommen werden

  • Überwachen Sie die Basiskosten, wenn der Cluster wächst