Fehler bei überschrittenem Spanner-Termin beheben

Diese Seite bietet einen Überblick über Fehler bei Spanner-Zeitüberschreitungen: was sie sind, warum sie auftreten und wie Sie sie beheben können.

Beim Zugriff auf Spanner APIs können Anfragen aus folgenden Gründen fehlschlagen: DEADLINE_EXCEEDED Fehler. Dieser Fehler gibt an, dass keine Antwort innerhalb des konfigurierten Zeitlimits empfangen wurde.

Ein Fehler, der zu einer Fristüberschreitung führt, kann viele Gründe haben, z. B. überlastete Spanner-Instanzen, nicht optimierte Schemas oder nicht optimiert Abfragen. Auf dieser Seite werden häufige Szenarien beschrieben, in denen ein Fehler aufgrund einer Fristüberschreitung beschrieben wird. und Sie erhalten einen Leitfaden zur Untersuchung und Lösung dieser Probleme.

Frist und Wiederholungsphilosophie von Spanner

Die Frist und Wiederholungsphilosophie von Spanner unterscheiden sich von vielen Systeme. In Spanner sollten Sie ein Zeitlimit als die Zeitraum, in dem eine Antwort nützlich ist. Künstlich eingestellte um denselben Vorgang erneut zu starten, empfohlen, da dies dazu führt, dass Vorgänge nie abgeschlossen werden. In werden die folgenden Strategien und Vorgänge nicht empfohlen: sie sind kontraproduktiv und verhindern den internen Wiederholungsversuch von Spanner. Verhalten:

  • Das Festlegen einer Frist, die zu kurz ist. Das bedeutet, dass der Vorgang nicht sind widerstandsfähig gegen gelegentliche Anstiege der Extremwertlatenz und können erst abgeschlossen werden, eine Zeitüberschreitung auftritt. Legen Sie stattdessen eine Frist fest, die den maximalen Zeitraum darstellt, in dem ist eine Antwort hilfreich.

  • Festlegen einer zu langen Frist und Abbrechen des Vorgangs vor dem Frist überschritten wird. Das führt zu Wiederholungsversuchen und verschwendet Arbeit. In insgesamt kann dies Ihre Instanz erheblich zusätzlich belasten.

Was ist der Fehler einer Fristüberschreitung?

Wenn Sie eine der Spanner-Clientbibliotheken verwenden, übernimmt die zugrunde liegende gRPC-Schicht Kommunikation, Marshalling, Unmarshalling, und Durchsetzung der Fristen. Fristen ermöglichen es Ihrer Anwendung, anzugeben, wie lange Er ist bereit, auf den Abschluss einer Anfrage zu warten, bevor sie beendet wird. mit dem Fehler, dass die Frist überschritten wurde.

Im Leitfaden zur Konfiguration einer Zeitüberschreitung wird Folgendes gezeigt: wie Sie Fristen (oder Zeitüberschreitungen) in jedem der unterstützten Spanner- Clientbibliotheken. Die Spanner-Clientbibliotheken verwenden das Standardzeitlimit und Wiederholungsrichtlinieneinstellungen, die in den folgenden Konfigurationsdateien definiert sind:

Weitere Informationen zu gRPC-Zeitlimits finden Sie unter gRPC und Zeitlimits.

So untersuchen und beheben Sie häufige Fehler bei Fristüberschreitungen

Bei den folgenden Problemtypen können DEADLINE_EXCEEDED-Fehler auftreten:

Probleme mit der Data Access API

Eine Spanner-Instanz muss entsprechend für Ihre um Probleme mit der Datenzugriffs-API zu vermeiden. Die folgenden Abschnitte beschreiben, wie Sie verschiedene Probleme mit Datenzugriffs-APIs untersuchen und beheben.

CPU-Auslastung der Spanner-Instanz prüfen

Die Anfragelatenz kann erheblich ansteigen, wenn die CPU-Auslastung den empfohlenen Schwellenwert für Intaktheit. Sie können die die Spanner-CPU-Auslastung in der Monitoring-Konsole in der Google Cloud Console bereitgestellt. Sie können auch Benachrichtigungen erstellen. basierend auf der CPU-Auslastung der Instanz ab.

Lösung

Schritte zum Reduzieren der CPU-Auslastung der Instanz finden Sie unter CPU-Auslastung reduzieren.

End-to-End-Latenz der Anfrage prüfen

Wenn eine Anfrage vom Client zu den Spanner-Servern und zurück übertragen wird, müssen mehrere Netzwerk-Hops durchgeführt werden: von der Clientbibliothek Google Front End (GFE): vom GFE zum Spanner API-Frontend und schließlich vom Spanner API-Front-End zum Spanner-Datenbank. Wenn Netzwerkprobleme bei einem dieser werden Sie möglicherweise Fehler wegen überschrittener Fristen sehen.

Die Latenz kann in jeder Phase erfasst werden. Weitere Informationen finden Sie unter Latenzpunkte in einer Spanner-Anfrage. Informationen zum Auftreten von Latenzen in Spanner finden Sie unter Ermitteln, wo in Spanner die Latenz auftritt

Lösung

Sobald Sie die Latenzaufschlüsselung erhalten haben, können Sie mit Messwerten die Latenz diagnostizieren, verstehen und Lösungen zu finden.

Probleme mit der Data API

Bestimmte nicht optimale Nutzungsmuster der Data API von Spanner Fehler wegen überschrittener Fristen verursachen. Dieser Abschnitt enthält Richtlinien dazu, um diese nicht optimalen Nutzungsmuster zu identifizieren.

Auf teure Suchanfragen prüfen

Sie versuchen, teure Abfragen auszuführen, die nicht innerhalb des konfigurierten Zeitlimits ausgeführt werden Deadline in den Clientbibliotheken kann zum Fehler einer Fristüberschreitung führen. Einige Beispiele für teure Abfragen sind unter anderem vollständige Scans einer große Tabelle, Cross-Joins über mehrere große Tabellen oder eine Abfrageausführung mit einer Prädikat über einer Nicht-Schlüsselspalte (auch ein vollständiger Tabellenscan).

Sie können teure Abfragen mithilfe der Abfragestatistiktabelle überprüfen. und die Tabelle mit den Transaktionsstatistiken. Diese Tabellen enthalten Informationen über langsam ausgeführte Abfragen und Transaktionen, z. B. als durchschnittliche Anzahl gelesener Zeilen, durchschnittlich gelesene Byte, durchschnittliche Anzahl von gescannten Zeilen und mehr. Darüber hinaus können Sie Abfrageausführungspläne generieren wie Ihre Abfragen ausgeführt werden.

Lösung

Informationen zur Optimierung Ihrer Abfragen finden Sie im Leitfaden mit Best Practices für SQL-Abfragen. Sie können auch die Daten aus den oben genannten Statistiktabellen und Ausführungspläne, um Abfragen zu optimieren und Schemaänderungen vorzunehmen zu Ihren Datenbanken hinzufügen. Mit diesen Best Practices lässt sich die Ausführungszeit von Anweisungen zu schreiben, was möglicherweise dazu beiträgt, die Fristüberschreitung zu beseitigen.

Auf Sperrenkonflikt prüfen

Spanner-Transaktionen müssen Sperren abrufen zu bestätigen. Anwendungen, die mit hohem Durchsatz ausgeführt werden, können dazu führen, um dieselben Ressourcen konkurrieren, was zu einer längeren Wartezeit auf den Abruf der Sperren und die die Gesamtleistung beeinflussen. Dies kann zu einer Überschreitung der Fristen für alle Lese- oder Schreibanfragen verwendet.

Sie finden die Ursache für Lese-Schreib-Transaktionen mit hoher Latenz, indem Sie mithilfe der Sperrstatistiktabelle und lesen Sie diesen Blogpost. In Ihrer Sperrstatistiktabelle finden Sie die Zeilenschlüssel mit dem höchsten Wert Wartezeiten bei Sperren.

Anleitung zur Fehlerbehebung bei Konflikten bei Sperren wird erläutert, wie Sie die Transaktionen finden, die auf die entsprechenden Spalten zugreifen. am Sperrkonflikt. Sie können auch feststellen, welche Transaktionen an einem Sperrkonflikt finden Sie im Leitfaden zur Fehlerbehebung bei Transaktions-Tags.

Lösung

Best Practices um Sperrenkonflikte zu reduzieren. Verwenden Sie außerdem schreibgeschützte Transaktionen. für einfache Lesevorgänge, um Sperrkonflikte mit den Schreibvorgängen zu vermeiden. Mit Lese-Schreib-Transaktionen sollten für Schreibvorgänge oder gemischte Lese-Schreib-Workflows reserviert sein. Wenn Sie diese Schritte ausführen, sollte sich die Gesamtlatenz Ihrer Transaktion verbessern. die Ausführungszeit und die Reduzierung der Frist für Fehler zu reduzieren.

Nach nicht optimierten Schemas suchen

Bevor Sie ein optimales Datenbankschema für Spanner entwerfen sollten Sie berücksichtigen, welche Abfragen ausgeführt werden, in Ihrer Datenbank. Suboptimale Schemas können bei der Ausführung zu Leistungsproblemen führen einige Suchanfragen. Aufgrund dieser Leistungsprobleme können Anfragen möglicherweise nicht abgeschlossen werden innerhalb der konfigurierten Frist.

Lösung

Das optimale Schemadesign hängt von den Lese- und Schreibvorgängen in Ihrer Datenbank. Die Best Practices für das Schemadesign und SQL sollten Sie die Best Practices befolgen, Schemadetails. Wenn Sie diese Leitfäden befolgen, vermeiden Sie die am häufigsten verwendeten Schemata Designprobleme. Weitere Ursachen für eine schlechte Leistung sind die Primärschlüssel Ihrer Wahl Tabellenlayout (siehe Verschränkte Tabellen für einen schnelleren Zugriff verwenden) Schemadesign (siehe Schema für Leistungsoptimierung) und die Leistung des Knotens, der in Ihre Spanner-Instanz erstellen (siehe Spanner-Leistungsübersicht).

Auf Hotspots prüfen

Da Spanner eine verteilte Datenbank ist, muss das Schemadesign das Verhindern von Hotspots berücksichtigt werden muss. Eine monotone Erstellung Durch Erhöhen der Spalten wird die Anzahl der Splits begrenzt, mit denen Sie arbeiten können, um die Arbeitslast gleichmäßig zu verteilen. Diese Engpässe können an Zeitüberschreitungen. Sie können auch den Key Visualizer verwenden, zur Behebung von durch Hotspots verursachten Leistungsproblemen.

Lösung

Lösungen finden Sie im vorherigen Abschnitt Auf nicht optimierte Seiten prüfen . um das Problem zu beheben. Gestalten Sie Ihre Datenbankschema und verschränkte Indexe verwenden um Indexe zu vermeiden, die ein Heißlaufen verursachen könnten. Wenn Sie diese Schritte ausführen, Informationen dazu, wie Sie das Problem beheben, finden Sie im Leitfaden zum Auswählen eines Primärschlüssels zur Vermeidung von Hotspots. Vermeiden Sie schließlich suboptimale Traffic-Muster wie z. B. Lesevorgänge mit großem Bereich, die möglicherweise verhindern ein lastbasiertes Aufteilen.

Auf falsch konfigurierte Zeitüberschreitungen prüfen

Die Clientbibliotheken bieten angemessene Timeout-Standardwerte für alle Anfragen in Spanner. Diese Standardkonfigurationen müssen jedoch an Ihre jeweilige Arbeitslast angepasst. Es lohnt sich, die Kosten Abfragen und die Anpassung der Fristen an Ihren spezifischen Anwendungsfall.

Lösung

Die Standardeinstellungen für Zeitüberschreitungen eignen sich für die meisten Anwendungsfälle. Nutzer können diese Konfigurationen überschreiben (siehe Leitfaden für benutzerdefinierte Zeitüberschreitung und Wiederholung), Es wird jedoch nicht empfohlen, aggressivere Zeitlimits als die standardmäßigen Zeitlimits zu verwenden. Wenn Sie das Zeitlimit ändern möchten, stellen Sie es auf den Zeitraum ein, bereit ist, auf das Ergebnis zu warten. Sie können Tests mit längeren Zeitlimits konfiguriert, aber niemals ein Zeitlimit festlegen, das kürzer ist als das tatsächliche Zeit, die die Anwendung bereit ist zu warten, da der Vorgang sonst häufiger wiederholt.

Probleme mit der Admin API

Admin API-Anfragen sind im Vergleich zu Daten-API-Anfragen kostspielige Vorgänge. Administratoranfragen wie CreateInstance, CreateDatabase oder CreateBackups können mehrere Sekunden dauern, bis eine Antwort zurückgegeben wird. Spanner-Client Bibliotheken legen für beide Instanzen 60 Minuten lange Fristen fest. und Datenbank Administrator-Anfragen stellen. So wird sichergestellt, dass der Server die Möglichkeit hat, , bevor der Client den Vorgang wiederholt oder fehlschlägt.

Lösung

Wenn Sie die Google Spanner-Clientbibliothek verwenden Damit Sie auf die Administrator-API zugreifen können, muss die Clientbibliothek aktualisiert sein und die neueste Version. Wenn Sie direkt über eine von Ihnen erstellte Clientbibliotheken, stellen Sie sicher, dass Sie keine strengeren als die Standardeinstellungen (60 Minuten) für Ihre Instanz. und Datenbank Administrator-Anfragen stellen.

Probleme mit der Google Cloud Console

Abfragen, die über die Spanner Studio-Seite der Google Cloud Console gesendet werden, können nicht fünf Minuten überschreiten. Wenn Sie eine teure Abfrage erstellen, die mehr als fünf Minuten ausgeführt wird, wird die folgende Fehlermeldung angezeigt:

Screenshot der Fehlermeldung zur überschrittenen Frist in der Google Cloud Console

Das Backend bricht die fehlgeschlagene Abfrage ab und die Transaktion wird möglicherweise zurückgesetzt wenn nötig.

Lösung

Sie können die Abfrage gemäß dem Leitfaden mit Best Practices für SQL-Abfragen neu schreiben.

Dataflow-Probleme

In Apache Beam beträgt die Standardkonfiguration für Zeitüberschreitungen zwei Stunden. für Lesevorgänge und 15 Sekunden für Commit-Vorgänge. Diese Konfigurationen ermöglichen längere Vorgänge, wenn im Vergleich zu den Zeitlimits für die eigenständige Clientbibliothek. Es ist jedoch Es ist immer noch möglich, dass ein Fehler wegen Zeitüberschreitung und Zeitüberschreitung ausgegeben wird, wenn die Arbeitselemente sind zu groß. Bei Bedarf können Sie den Apache Beam-Commit anpassen. Zeitlimitkonfiguration.

Lösung

Wenn in den Schritten ReadFromSpanner / Execute query / Read from Spanner / Read from Partitions ein Fehler auftritt, bei dem die Frist überschritten wurde, prüfen Sie die Tabelle mit Abfragestatistiken um herauszufinden, welche Abfrage eine große Anzahl von Zeilen gescannt hat. Passen Sie dann um die Ausführungszeit zu reduzieren.

Ein weiteres Beispiel für einen Dataflow-Fehler, bei dem das Zeitlimit überschritten wurde, finden Sie unter die folgende Ausnahmemeldung:

exception:
     org.apache.beam.sdk.util.UserCodeException:
     com.google.cloud.spanner.SpannerException: DEADLINE_EXCEEDED:
     io.grpc.StatusRuntimeException: DEADLINE_EXCEEDED: deadline exceeded after
     3599.999905380s.
     [remote_addr=batch-spanner.googleapis.com/172.217.5.234:443] at
 org.apache.beam.runners.dataflow.worker.GroupAlsoByWindowsParDoFn$1.output(GroupAlsoByWindowsParDoFn.java:184)

Dieses Zeitlimit wurde verursacht, weil die Arbeitsaufgaben zu groß sind. Im vorherigen Beispiel könnten die folgenden zwei Empfehlungen hilfreich sein. Zunächst können Sie versuchen, den Shuffle-Dienst, falls er noch nicht aktiviert ist. Zweitens können Sie versuchen, Konfigurationen im Lesevorgang Ihrer Datenbank, z. B. maxPartitions und partitionSizeBytes. Weitere Informationen findest du unter PartitionOptions. die Arbeitselementgröße zu reduzieren. Ein Beispiel hierfür finden Sie in dieser Dataflow-Vorlage.

Zusätzliche Frist wurde überschritten

Wenn der Fehler DEADLINE_EXCEEDED weiterhin angezeigt wird, nachdem Sie das zur Fehlerbehebung, öffnen Sie eine Supportanfrage, die folgenden Szenarien:

  • Hohe Google Front End-Latenz, aber niedrige Spanner API-Anfragelatenz
  • Eine hohe Spanner API-Anfragelatenz, aber eine niedrige Abfragelatenz

Sie können auch die folgenden Ressourcen zur Fehlerbehebung zurate ziehen: