Fehlerbehebung bei Lesepoolabfragen

Auf dieser Seite werden Methoden zum Untersuchen und zur Fehlerbehebung von Abfragen beschrieben, die AlloyDB for PostgreSQL an eine Lesepoolinstanz sendet:

  • Eine detaillierte Liste der Knoten eines Lesepools, einschließlich ihrer IP-Adressen.
  • Direkte Verbindung zu einem Knoten zu Debugging-Zwecken.
  • Anhand der AlloyDB-Protokolle wird ermittelt, welcher Knoten eine bestimmte Abfrage verarbeitet, die an einen Lesepool gesendet wurde.
  • Abfrage der Logs nach allen letzten Aktivitäten von einem bestimmten Knoten des Lesepools.
  • Sie können sich Google Cloud -Messwerte ansehen, die mit einem Knoten des Lesepools verknüpft sind.

In Kombination bieten diese Methoden Zugriff auf Ihre Lesepools für Diagnose und Fehlerbehebung. Wenn beispielsweise einer der Lesepools Ihres Clusters bei der Verarbeitung einer langwierigen Abfrage eine ungewöhnlich hohe CPU-Auslastung aufweist, können Sie mit diesen Methoden ermitteln, welcher Knoten diese Abfrage verarbeitet, und dann direkt eine Verbindung zu diesem Knoten herstellen, um die Abfrage weiter zu untersuchen oder zu beenden.

Details zu den Knoten eines Lesepools auflisten

Bei der normalen Verwendung von AlloyDB müssen Sie die Identitäten oder Adressen der Knoten, aus denen Ihre Lesepools bestehen, nicht kennen. Bei Bedarf können Sie sich jedoch eine Liste der Knoten einer Lesepoolinstanz anzeigen lassen. Jeder aufgeführte Knoten enthält die folgenden Informationen, die für die anschließende Diagnose und Fehlerbehebung hilfreich sind:

Wenn Sie die internen ID-Strings und IP-Adressen der Knoten eines Lesepools sehen möchten, folgen Sie der gcloud-spezifischen Anleitung unter Instanzdetails ansehen, fügen Sie aber ein zusätzliches --view=FULL-Befehlszeilenargument hinzu:

gcloud

gcloud alloydb instances describe READ_POOL_ID \
 --region=REGION_ID \
 --cluster=CLUSTER_ID \
 --project=PROJECT_ID \
 --view=FULL

Ersetzen Sie Folgendes:

  • READ_POOL_ID: Die ID des Lesepools.
  • REGION_ID: Die Regions-ID der Instanz.
  • CLUSTER_ID: Die ID des Clusters der Instanz.
  • PROJECT_ID: Die ID des Projekts der Instanz.

Die Ausgabe enthält einen Abschnitt mit der Überschrift nodes, der in etwa so aussieht:

nodes:
- id: READ_POOL_INSTANCE_ID-edd4f6ed-hcfh
  ip: 10.90.80.57
  state: HEALTHY
  zoneId: us-central1-b
- id: READ_POOL_INSTANCE_ID-edd4f6ed-ldbm
  ip: 10.90.80.56
  state: HEALTHY
  zoneId: us-central1-c

Die Felder id und ip für jeden Eintrag sind besonders relevant für die anderen auf dieser Seite beschriebenen Techniken:

  • Im Feld ip wird die IP-Adresse des Knotens im VPC des Clusters angezeigt.

  • Das Feld id enthält den vollständigen Google Cloud -ID-String des Knotens. In den protokollierten Einträgen für einen Knoten werden nur die letzten vier Zeichen dieses Strings angezeigt.

    Wenn Sie beispielsweise nach Logeinträgen suchen möchten, die den ersten der beiden Knoten in der vorherigen Beispielausgabe enthalten, fragen Sie die Logs mit dem ID-String hcfh ab.

Direkte Verbindung zu einem Knoten

Sobald Sie die IP-Adresse eines Knotens kennen, können Sie direkt eine Verbindung zu seinem PostgreSQL-Server herstellen. Wenn Sie beispielsweise psql verwenden möchten, um eine Verbindung zu einer VM in der VPC Ihres Clusters herzustellen, folgen Sie der Anleitung unter psql-Client ausführen. Geben Sie dabei die IP-Adresse des Knotens an, nicht die der Lesepoolinstanz:

psql -h NODE_IP_ADDRESS -U USERNAME

Knotenaktivität in Protokollen finden

AlloyDB fügt Logeinträgen zu Abfragen, die von Lesepools verarbeitet werden, Knoten-IDs hinzu. Generell haben Sie zwei Möglichkeiten, diese IDs zu verwenden:

  • Ermitteln Sie die IP-Adresse dieses Knotens, damit Sie eine Verbindung herstellen können.
  • Führen Sie weitere Logabfragen aus, um mehr über die letzten Aktivitäten des Knotens zu erfahren.

Ermitteln, welcher Knoten eine bekannte Abfrage verarbeitet

Wenn Sie wissen, dass in einem bestimmten Lesepool eine lang andauernde Abfrage verarbeitet wird, können Sie mit dem Log-Explorer die ID des Knotens ermitteln, der diese Abfrage verarbeitet.

Diese Methode funktioniert nur bei Lesepool-Instanzen, für die die pgAudit-Erweiterung aktiviert ist.

  1. Rufen Sie den Log-Explorer auf:

    Zu „Log-Explorer“

  2. Fügen Sie im Query Builder das Feld resource.labels.instance_id="READ_POOL_ID" zum Abfrageeditor hinzu und ersetzen Sie READ_POOL_ID durch den Namen Ihrer Lesepoolinstanz.

  3. Fügen Sie die SQL-Anweisung, die Sie untersuchen möchten, vollständig oder teilweise in das Feld des Abfrageeditors ein. Beispiel: select id from MyTable. Bei dieser Eingabe wird nicht zwischen Groß- und Kleinschreibung unterschieden.

  4. Klicken Sie auf Abfrage ausführen.

  5. Mit den Steuerelementen im Log-Explorer können Sie die Abfrage nach Bedarf optimieren und noch einmal ausführen, um die Ergebnisse auf die relevantesten zu beschränken.

  6. Klicken Sie in der Ergebnisliste auf einen Logeintrag, um ihn zu maximieren.

  7. Klicken Sie in der maximierten Ansicht des Eintrags auf das Feld labels.

  8. Notieren Sie sich den Wert von NODE_ID unter labels.

Das Ergebnis ist die vierstellige Kennung des Knotens, der die Abfrage verarbeitet.

Verbindung zu einem Knoten herstellen, der in einem Logeintrag erwähnt wird

Wenn Sie basierend auf den protokollierten Aktivitäten eine direkte Verbindung zum PostgreSQL-Server eines bestimmten Knotens herstellen möchten, gehen Sie so vor:

  1. Notieren Sie sich den vierstelligen ID-String des protokollierten Knotens. Sie finden diese ID im Feld NODE_ID des Logeintrags.

  2. Liste die Knoten für den Lesepool auf.

  3. Suchen Sie in dieser Liste nach einem Knoten mit dem ID-String, der mit den vier Zeichen endet, die Sie im ersten Schritt notiert haben. Es ist möglich, dass keiner der aufgeführten Knoten übereinstimmt.

  4. Wenn Sie einen übereinstimmenden Knoten finden, verwenden Sie die entsprechende IP-Adresse, um eine Verbindung zum PostgreSQL-Server dieses Knotens herzustellen.

    Andernfalls, wenn keiner der im vorherigen Schritt aufgeführten Knoten des Lesepools IDs hat, die mit dem protokollierten Knoten übereinstimmen, wurde dieser Knoten vom Lesepool in der Zeit seit dem ursprünglichen Logeintrag außer Betrieb genommen. Das ist normales Verhalten für AlloyDB-Lesepools, wie im Artikel Hinweis zur Ephemerizität von Knoten beschrieben. In diesem Fall können Sie keine direkte Verbindung zu diesem Knoten herstellen.

Nachdem Sie eine Verbindung zum PostgreSQL-Server eines Knotens hergestellt haben, können Sie mithilfe von Standard-PostgreSQL-Monitoring-Methoden wie pg_stat_activity die aktuellen Prozesse des Knotens untersuchen und bei Bedarf anpassen.

Weitere Logeinträge zu einem Knoten aufrufen

So rufen Sie die letzten protokollierten Aktivitäten für einen Knoten mit einer bestimmten ID auf:

  1. Rufen Sie den Log-Explorer auf:

    Zu „Log-Explorer“

  2. Fügen Sie labels.NODE_ID=NODE_ID dem Query Builder des Log-Explorers hinzu und ersetzen Sie NODE_ID durch den vierstelligen ID-String des Knotens.

  3. Klicken Sie auf Abfrage ausführen, um alle Aktivitäten dieses Knotens im ausgewählten Zeitraum zu sehen, oder passen Sie die Abfrage an, um sie weiter zu filtern.

  4. Wiederholen Sie gegebenenfalls den vorherigen Schritt, um die Suche einzugrenzen.

Knotenmesswerte überwachen

Im AlloyDB-Dashboard „Systemstatistik“ können Sie Messwerte für einzelne Knoten aufrufen. Weitere Informationen zu verfügbaren Knotenmesswerten finden Sie in der Referenz zu Systemmesswerten.

Informationen dazu, welche Knoten-IDs mit einer bestimmten Lesepoolinstanz verknüpft sind, finden Sie unter Details zu den Knoten eines Lesepools auflisten.

Eine vollständige Referenzdokumentation zu diesen und anderen AlloyDB-Messwerten finden Sie unter alloydb in „Google Cloud -Messwerte“.

Hinweis zur Ephemeralität von Knoten

Sie können zwar vorübergehend eine Verbindung zu einem Knoten herstellen, um etwas zu untersuchen oder zu debuggen, aber Anwendungen, die Lesepools verwenden, sollten immer eine Verbindung zu diesen Pools auf Instanzebene herstellen. Verwenden Sie dazu die IP-Adresse, die in der Instanzliste des Clusters angezeigt wird.

AlloyDB behandelt die Knoten seiner Lesepools als sitzungsspezifische, austauschbare Ressourcen. Der Dienst ändert das Node-Roster eines Lesepools so oft wie nötig, um die Auslastung der Lesepool-Instanz ausgeglichen und reaktionsschnell zu halten. Bei einer Anwendung, die direkt mit einem Read Pool-Knoten und nicht mit einer Read Pool-Instanz verbunden ist, besteht das Risiko, dass die Verbindung zur Datenbank abrupt getrennt wird, wenn AlloyDB das Knotenverzeichnis der Instanz aktualisiert.

Lassen Sie Ihre Anwendungen immer auf Instanzebene eine Verbindung zu Ihren Lesepools herstellen und AlloyDB die Abfragen effizient an die richtigen Knoten weiterleiten.

Nächste Schritte