Häufige Fehler des Amazon QLDB-Treibers - Amazon Quantum Ledger Database (Amazon QLDB)

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.

Häufige Fehler des Amazon QLDB-Treibers

In diesem Abschnitt werden Laufzeitfehler beschrieben, die vom Amazon QLDB-Treiber bei der Interaktion mit der QLDB-Sitzungs-API ausgelöst werden können.

Im Folgenden finden Sie eine Liste von allgemeinen Ausnahmen, die vom Treiber zurückgegeben werden. Jede Ausnahme enthält die spezifische Fehlermeldung, gefolgt von einer kurzen Beschreibung und Vorschlägen für mögliche Lösungen.

CapacityExceededException

Meldung: Kapazität überschritten

Amazon QLDB lehnte die Anfrage ab, da sie die Verarbeitungskapazität des Ledgers überstieg. QLDB setzt ein internes Skalierungslimit pro Ledger durch, um den Zustand und die Leistung des Dienstes aufrechtzuerhalten. Dieses Limit variiert je nach Workload-Größe der einzelnen Anfrage. Beispielsweise kann eine Anfrage eine erhöhte Arbeitslast haben, wenn sie ineffiziente Datentransaktionen durchführt, wie z. B. Tabellenscans, die aus einer nicht indexqualifizierten Abfrage resultieren.

Wir empfehlen, dass Sie warten, bevor Sie die Anfrage erneut versuchen. Wenn Ihre Anwendung immer wieder auf diese Ausnahme stößt, optimieren Sie Ihre Kontoauszüge und verringern Sie die Rate und das Volumen der Anfragen, die Sie an das Hauptbuch senden. Beispiele für die Anweisungsoptimierung sind die Ausführung von weniger Anweisungen pro Transaktion und die Optimierung Ihrer Tabellenindizes. Informationen zur Optimierung von Anweisungen und zur Vermeidung von Tabellenscans finden Sie unterOptimieren der Abfrageleistung.

Wir empfehlen außerdem die neueste Version des QLDB-Treiber zu verwenden. Der Treiber hat eine standardmäßige Wiederholungsrichtlinie, die Exponential Backoff und Jitter verwendet, um bei solchen Ausnahmen automatisch Wiederholungsversuche zu starten. Das Konzept des exponentiellen Backoffs besteht darin, für aufeinanderfolgende Fehlerantworten zunehmend längere Wartezeiten zwischen Wiederholungsversuchen zu verwenden.

InvalidSessionException

Meldung: Transaction transactionId has expired (Transaktion abgelaufen)

Eine Transaktion hat ihre maximale Lebensdauer überschritten. Eine Transaktion kann bis zu 30 Sekunden lang ausgeführt werden, bevor sie bestätigt wird. Nach diesem Timeout-Limit wird jede an der Transaktion geleistete Arbeit abgelehnt und QLDB verwirft die Sitzung. Dieses Limit schützt den Kunden vor Sitzungsverlusten, indem Transaktionen gestartet werden, ohne sie zu bestätigen oder abzubrechen.

Wenn dies eine häufige Ausnahme in Ihrer Anwendung ist, ist es wahrscheinlich, dass die Ausführung von Transaktionen einfach zu lange dauert. Wenn die Transaktionslaufzeit länger als 30 Sekunden dauert, optimieren Sie Ihre Kontoauszüge, um die Transaktionen zu beschleunigen. Beispiele für die Anweisungsoptimierung sind die Ausführung von weniger Anweisungen pro Transaktion und die Optimierung Ihrer Tabellenindizes. Weitere Informationen finden Sie unter Optimieren der Abfrageleistung.

InvalidSessionException

Meldung: Session sessionId has expired (Sitzung ist abgelaufen)

QLDB hat die Sitzung verworfen, da sie ihre maximale Gesamtlebensdauer überschritten hat. QLDB verwirft Sitzungen nach 13—17 Minuten, unabhängig von einer aktiven Transaktion. Sitzungen können aus einer Reihe von Gründen verloren gehen oder beeinträchtigt werden, wie z. B. Hardwarefehler, Netzwerkfehler oder Anwendungsneustarts. Daher erzwingt QLDB eine maximale Lebensdauer für Sitzungen, um sicherzustellen, dass die Clientsoftware gegen Sitzungsausfälle resistent ist.

Wenn diese Ausnahme auftritt, empfehlen wir, eine neue Sitzung abzurufen und die Transaktion erneut zu versuchen. Wir empfehlen außerdem, die neueste Version des QLDB-Treibers zu verwenden, der den Sitzungspool und seinen Zustand im Namen der Anwendung verwaltet.

InvalidSessionException

Meldung: No such session (Keine solche Sitzung)

Der Client hat versucht, mit QLDB über eine Sitzung zu handeln, die nicht existiert. Unter der Annahme, dass der Client eine Sitzung verwendet, die zuvor existiert hat, ist die Sitzung möglicherweise aus einem der folgenden Gründe nicht mehr vorhanden:

  • Wenn eine Sitzung an einem internen Serverausfall beteiligt ist (d. h. ein Fehler mit dem HTTP-Antwortcode 500), kann QLDB sich dafür entscheiden, die Sitzung vollständig zu verwerfen, anstatt dem Kunden die Transaktion mit einer Sitzung mit unsicherem Status zu ermöglichen. Dann schlagen alle Wiederholungsversuche in dieser Sitzung mit diesem Fehler fehl.

  • Abgelaufene Sitzungen werden irgendwann von QLDB vergessen. Dann führen alle Versuche, die Sitzung weiter zu verwenden, zu diesem Fehler anstatt des ursprünglichen InvalidSessionException.

Wenn diese Ausnahme auftritt, empfehlen wir, eine neue Sitzung abzurufen und die Transaktion erneut zu versuchen. Wir empfehlen außerdem, die neueste Version des QLDB-Treibers zu verwenden, der den Sitzungspool und seinen Zustand im Namen der Anwendung verwaltet.

RateExceededException

Meldung: The rate was exceeded (Die Rate wurde überschritten)

QLDB hat einen Client auf der Grundlage der Identität des Anrufers gedrosselt. QLDB erzwingt die Drosselung pro Region und pro Konto mithilfe eines Token-Bucket-Throttling-Algorithmus. QLDB tut dies, um die Leistung des Dienstes zu unterstützen und um eine faire Nutzung für alle QLDB Kunden sicherzustellen. Beispielsweise kann der Versuch, eine große Anzahl gleichzeitiger Sitzungen mit dem StartSessionRequest-Vorgang abzurufen, zu einer Drosselung führen.

Um den korrekten Anwendungszustand aufrechtzuerhalten und eine weitere Drosselung zu verringern, können Sie diese Ausnahme mit exponentiellem Backoff und Jitter wiederholen. Das Konzept des exponentiellen Backoffs besteht darin, für aufeinanderfolgende Fehlerantworten zunehmend längere Wartezeiten zwischen Wiederholungsversuchen zu verwenden. Wir empfehlen die neueste Version des QLDB-Treiber zu verwenden. Der Treiber verfügt über eine standardmäßige Wiederholungsrichtlinie, die exponentielles Backoff und Jitter verwendet, um bei solchen Ausnahmen automatisch einen erneuten Versuch zu starten.

Die neueste Version des QLDB-Treibers kann auch hilfreich sein, wenn Ihre Anwendung ständig von QLDB fürStartSessionRequest Anrufe gedrosselt wird. Der Treiber verwaltet einen Pool von Sitzungen, die transaktionsübergreifend wiederverwendet werden, was dazu beitragen kann, die Anzahl derStartSessionRequest Anrufe zu reduzieren, die Ihre Anwendung tätigt. Um eine Steigerung der API-Drosselungslimits anzufordern, wenden Sie sich an das AWS SupportCenter.

LimitExceededException

Meldung: Exceeded the session limit (Sitzungslimit überschritten)

Ein Ledger hat sein Kontingent (auch als Limit bezeichnet) für die Anzahl aktiver Sitzungen überschritten. Dieses Kontingent ist in Kontingente und Limits in Amazon QLDB definiert. Die Anzahl aktiver Sitzungen eines Ledgers ist schließlich konsistent, und Ledger, die konsistent in der Nähe des Kontingents ausgeführt werden, erfahren diese Ausnahme möglicherweise in regelmäßigen Abständen.

Um die Integrität Ihrer Anwendung aufrechtzuerhalten, empfehlen wir, bei dieser Ausnahme einen erneuten Versuch zu machen. Um diese Ausnahme zu vermeiden, stellen Sie sicher, dass Sie nicht mehr als 1.500 gleichzeitige Sitzungen für ein einzelnes Ledger über alle Clients hinweg konfiguriert haben. Sie können beispielsweise die maxConcurrentTransactionsMethode des Amazon QLDB-Treibers für Java verwenden, um die maximale Anzahl verfügbarer Sitzungen in einer Treiberinstanz zu konfigurieren.

QldbClientException

Meldung: A streamed result is only valid when the parent transaction is open (Ein gestreamtes Ergebnis ist nur gültig, wenn die übergeordnete Transaktion geöffnet ist)

Die Transaktion ist geschlossen und kann nicht verwendet werden, um die Ergebnisse von QLDB abzurufen. Eine Transaktion wird abgeschlossen, wenn sie entweder bestätigt oder storniert wurde.

Diese Ausnahme tritt auf, wenn der Client direkt mit demTransaction Objekt arbeitet und versucht, Ergebnisse von QLDB abzurufen, nachdem er eine Transaktion bestätigt oder abgebrochen hat. Um dieses Problem zu beheben, muss der Kunde die Daten lesen, bevor er die Transaktion abschließt.