亞馬遜 QLDB 驅動程序的常見錯誤 - Amazon Quantum Ledger Database (Amazon QLDB)

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

亞馬遜 QLDB 驅動程序的常見錯誤

本節說明與 QLDB 工作階段 API 互動時,Amazon QLDB 驅動程式可能會擲回的執行階段錯誤。

以下是驅動程式所傳回的常用例外狀況清單。每個例外都包含特定的錯誤訊息,後面接著簡短的描述和可能解決方案的建議。

CapacityExceededException

訊息:容量超過

Amazon QLDB 拒絕了該請求,因為它超出了分類帳的處理能力。QLDB 會針對每個分類帳強制執行內部調整規模限制,以維持服務的健康狀態和效能。此限制會根據每個個別要求的工作負載大小而有所不同。例如,如果要求執行效率低下的資料交易 (例如,非索引限定查詢所產生的資料表掃描),工作負載可能會增加。

我們建議您等待,然後再重試請求。如果您的應用模組持續遇到此例外,請最佳化對帳單,並降低傳送至分類帳之請求的匯率與數量。陳述式最佳化的範例包括每個交易執行較少的陳述式以及調整資料表索引。若要瞭解如何最佳化陳述式並避免表格掃描,請參閱最佳化查詢效能

我們亦建議您使用最新版本的 QLDB 驅動程式。驅動程式具有預設的重試原則,該原則會使用指數輪詢和抖動來自動重試例外狀況 (例如此類)。指數輪詢的概念是在連續錯誤響應的重試之間使用逐漸更長的等待時間。

InvalidSessionException

訊息:交易交易 ID 已過期

交易超過其最大生命週期。在認可之前,交易最多可以執行 30 秒。在此逾時限制之後,任何在交易上完成的工作都會遭到拒絕,而 QLDB 會捨棄工作階段。此限制可透過啟動交易而不提交或取消工作階段來保護用戶端不會洩漏工作階段。

如果這是應用程式中常見的例外狀況,則可能是交易執行時間太長。如果交易執行階段的時間超過 30 秒,請最佳化陳述式以加速交易。陳述式最佳化的範例包括每個交易執行較少的陳述式以及調整資料表索引。如需詳細資訊,請參閱最佳化查詢效能

InvalidSessionException

訊息:階段作業 ID 已過期

QLDB 捨棄工作階段,因為它超過其最大總存留期。QLDB 會在 13—17 分鐘後捨棄工作階段,不論作用中的交易為何。工作階段可能會因為多種原因而遺失或受損,例如硬體故障、網路故障或應用程式重新啟動。因此,QLDB 會強制執行工作階段的最大生命週期,以確保用戶端軟體能夠抵禦工作階段失敗。

如果您遇到此例外狀況,建議您取得新的階段作業,然後重試該交易。我們也建議您使用最新版本的 QLDB 驅動程式,該驅動程式會代表應用程式管理工作階段集區及其健全狀況。

InvalidSessionException

訊息:沒有此類工作階段

用戶端嘗試使用不存在的工作階段與 QLDB 進行交易。假設用戶端使用先前存在的工作階段,工作階段可能因為下列其中一種情況而不再存在:

  • 如果工作階段涉及內部伺服器故障 (也就是 HTTP 回應碼為 500 的錯誤),QLDB 可能會選擇完全捨棄工作階段,而不是允許客戶在不確定狀態的工作階段進行交易。然後,該會話上的任何重試嘗試都會失敗並顯示此錯誤。

  • 過期的工作階段最終會被 QLDB 遺忘。然後,任何嘗試繼續使用會話都會導致此錯誤,而不是初始錯誤InvalidSessionException

如果您遇到此例外狀況,建議您取得新的階段作業,然後重試該交易。我們也建議您使用最新版本的 QLDB 驅動程式,該驅動程式會代表應用程式管理工作階段集區及其健全狀況。

RateExceededException

訊息:超過比率

QLDB 限制了基於呼叫者的身份的客戶端。QLDB 會使用權杖儲存貯體節流演算法,針對每個區域、每個帳戶強制執行節流。QLDB 這樣做是為了協助服務效能,並確保所有 QLDB 客戶的公平使用。例如,嘗試使用該作業取得大量並行工StartSessionRequest作階段可能會導致節流。

若要維持應用程式健康狀態並減輕進一步的節流,您可以使用指數輪詢和抖動在此例外狀況上重試。指數輪詢的概念是在連續錯誤響應的重試之間使用逐漸更長的等待時間。我們建議您使用最新版本的 QLDB 驅動程式。驅動程式具有預設的重試原則,該原則會使用指數輪詢和抖動來自動重試例外狀況 (例如此類)。

如果您的應用程式持續受到 QLDB 限制StartSessionRequest呼叫,最新版本的 QLDB 驅動程式也會有所幫助。驅動程式會維護跨交易重複使用的工作階段集區,這有助於減少應用程式進行的StartSessionRequest呼叫次數。若要請求提高 API 調節限制,請與中AWS Support心聯絡。

LimitExceededException

訊息:超過工作階段限制

分類帳超過其作用中階段作業數目的配額 (也稱為制)。此配額定義於中亞馬遜 QLDB 中的配額和限制。分類帳的作用中階段作業計數最終是一致的,且持續在配額附近執行的分類帳可能會定期看到此例外。

為了維持應用程式的健康狀態,我們建議您重試此例外狀況。若要避免此例外狀況,請確定您尚未針對所有用戶端的單一分類帳設定超過 1,500 個並行階段作業。例如,您可以使用適用於 Java 的 Amazon QLDB 驅動程式maxConcurrentTransactions方法來設定驅動程式執行個體中可用工作階段的數目上限。

QldbClientException

訊息:只有在上階交易開啟時,串流的結果才有效

交易已關閉,無法用於從 QLDB 擷取結果。交易在提交或取消時關閉。

當用戶端直接使用Transaction物件,並嘗試提交或取消交易之後從 QLDB 擷取結果時,就會發生此例外狀況。為了緩解此問題,客戶端必須在關閉交易之前讀取數據。