Fehlerbehebung bei Lesepoolabfragen

Auf dieser Seite werden Techniken 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, ansehen.
  • Zu Debugging-Zwecken direkt eine Verbindung zu einem Knoten herstellen.
  • AlloyDB-Logs untersuchen, um zu ermitteln, welcher Knoten eine bestimmte Abfrage verarbeitet, die an einen Lesepool gesendet wurde.
  • Die Logs nach allen letzten Aktivitäten eines bestimmten Lesepoolknotens abfragen.
  • Mit einem Lesepoolknoten verknüpfte Google Cloud Messwerte ansehen.

Zusammen ermöglichen diese Techniken den Diagnose- und Debugging-Zugriff auf Ihre Lesepools. Wenn beispielsweise einer der Lesepools Ihres Clusters eine ungewöhnlich hohe CPU-Auslastung aufweist, während eine zeitaufwendige Abfrage verarbeitet wird, können Sie mit diesen Techniken 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 jedoch eine Liste der Knoten einer Lesepoolinstanz aufrufen. Jeder aufgeführte Knoten enthält die folgenden Informationen, die für die anschließende Diagnose und Fehlerbehebung nützlich 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 Bezeichnung nodes, der 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 Techniken, die auf dieser Seite beschrieben werden:

  • Das Feld ip zeigt die IP-Adresse des Knotens in der VPC des Clusters.

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

    Wenn Sie beispielsweise Logeinträge für den ersten der beiden Knoten in der vorherigen Beispielausgabe finden möchten, fragen Sie die Logs mit dem ID-String hcfhab.

Direkt eine Verbindung zu einem Knoten herstellen

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 und nicht die seiner Lesepoolinstanz an:

psql -h NODE_IP_ADDRESS -U USERNAME

Knotenaktivität in Logs finden

AlloyDB fügt Knoten-IDs in Logeinträge zu Abfragen ein, die von Lesepools verarbeitet werden. Im Allgemeinen können Sie diese IDs auf zwei Arten verwenden:

  • Die IP-Adresse dieses Knotens ermitteln, damit Sie eine Verbindung zu ihm herstellen können.
  • Weitere Logabfragen ausführen, um mehr über die letzten Aktivitäten des Knotens zu erfahren.

Ermitteln, welcher Knoten eine bekannte Abfrage verarbeitet

Wenn Sie wissen, dass ein bestimmter Lesepool eine zeitaufwendige Abfrage verarbeitet, können Sie mit dem Log-Explorer die ID des Knotens ermitteln, der diese Abfrage verarbeitet.

Diese Technik funktioniert nur bei Lesepoolinstanzen, bei denen die pgAudit-Erweiterung aktiviert ist.

  1. Rufen Sie den Log-Explorer auf:

    Zu „Log-Explorer“

  2. Fügen Sie im Abfrage editor resource.labels.instance_id="READ_POOL_ID" in das Feld des Abfrageeditors ein und ersetzen Sie READ_POOL_ID durch den Namen Ihrer Lesepoolinstanz.

  3. Fügen Sie die SQL-Anweisung, die Sie untersuchen, ganz 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. Verwenden Sie die Steuerelemente des Log-Explorers, um die Abfrage nach Bedarf anzupassen und noch einmal auszuführen, um die Ergebnisse auf die relevantesten zu filtern.

  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 ID des Knotens, der die Abfrage verarbeitet.

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

Wenn Sie basierend auf der protokollierten Aktivität direkt eine 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. Listen Sie die Knoten für den Lesepool auf.

  3. Suchen Sie in dieser Liste nach einem Knoten, dessen ID-String mit den vier Zeichen endet, die Sie im ersten Schritt notiert haben. Möglicherweise stimmt keiner der aufgeführten Knoten überein.

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

    Wenn keiner der im vorherigen Schritt aufgeführten Knoten des Lesepools IDs hat, die mit dem protokollierten Knoten übereinstimmen, wurde dieser Knoten vom Lesepool außer Betrieb genommen, seit der ursprüngliche Logeintrag erstellt wurde. Dies ist das normale Verhalten für AlloyDB-Lesepools, wie unter Hinweis zur Flüchtigkeit von Knoten beschrieben. In diesem Fall können Sie keine direkte Verbindung zu diesem Knoten herstellen.

Sobald Sie eine Verbindung zum PostgreSQL-Server eines Knotens hergestellt haben, können Sie Standardtechniken zur PostgreSQL-Überwachung wie pg_stat_activityverwenden, um die aktuellen Prozesse des Knotens weiter zu untersuchen und sie nach Bedarf anzupassen.

Weitere Logeinträge zu einem Knoten ansehen

So sehen Sie weitere aktuelle protokollierte Aktivitäten zu einem Knoten mit einer bestimmten ID:

  1. Rufen Sie den Log-Explorer auf:

    Zu „Log-Explorer“

  2. Fügen Sie labels.NODE_ID=NODE_ID in den Query Builder des Log-Explorers ein 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 den vorherigen Schritt nach Bedarf, um Ihre Suche zu verfeinern.

Knotenmesswerte beobachten

Sie können Messwerte für einzelne Knoten im Dashboard „AlloyDB-Systemstatistiken“ ansehen. Weitere Informationen zu den verfügbaren Knotenmesswerten finden Sie in der Referenz zu Systemstatistiken.

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

Die vollständige Referenzdokumentation zu diesen und anderen AlloyDB Messwerten finden Sie unter alloydb in "Google Cloud Messwerte".

Hinweis zur Flüchtigkeit von Knoten

Sie können zwar gefahrlos eine Verbindung zu einem Knoten herstellen, um ihn vorübergehend zu untersuchen oder Fehler zu beheben, aber Anwendungen, die Lesepools verwenden, sollten immer auf Instanzebene eine Verbindung zu diesen Pools herstellen. Verwenden Sie dazu die IP-Adresse, die der Cluster in seiner Instanz Liste anzeigt.

AlloyDB behandelt die Knoten seiner Lesepools als flüchtige, austauschbare Ressourcen. Der Dienst ändert die Liste der Knoten eines Lesepools so oft wie nötig, um die Last der Lesepoolinstanz auszugleichen und die Reaktionsfähigkeit zu gewährleisten. Bei einer Anwendung, die direkt eine Verbindung zu einem Lesepoolknoten und nicht zu einer Lesepoolinstanz herstellt, besteht das Risiko, dass die Verbindung zur Datenbank abrupt getrennt wird, wenn AlloyDB die Knotenliste der Instanz aktualisiert.

Lassen Sie Ihre Anwendungen immer auf Instanzebene eine Verbindung zu Ihren Lesepools herstellen und überlassen Sie AlloyDB die Aufgabe, Ihre Abfragen effizient an die richtigen Knoten weiterzuleiten.

Nächste Schritte