來自 Amazon QLDB 驅動程式的常見錯誤 - Amazon Quantum Ledger Database (Amazon QLDB)

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

來自 Amazon QLDB 驅動程式的常見錯誤

重要

支援終止通知:現有客戶將可以使用 Amazon QLDB,直到 07/31/2025 的支援結束為止。如需詳細資訊,請參閱將 Amazon QLDB Ledger 遷移至 Amazon Aurora PostgreSQL

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

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

CapacityExceededException

訊息:超過容量

Amazon QLDB 拒絕請求,因為它超過了分類帳的處理容量。QLDB 會強制執行每個分類帳的內部擴展限制,以維護服務的運作狀態和效能。此限制會根據每個個別請求的工作負載大小而有所不同。例如,如果請求執行低效率的資料交易,例如非索引合格查詢所產生的資料表掃描,則其工作負載可能會增加。

建議您先等待 ,再重試請求。如果您的應用程式持續遇到此例外狀況,請最佳化您的陳述式,並降低您傳送至分類帳的請求速率和數量。陳述式最佳化的範例包括每個交易執行較少的陳述式,以及調校資料表索引。若要了解如何最佳化陳述式並避免資料表掃描,請參閱 最佳化查詢效能

我們也建議使用最新版本的 QLDB 驅動程式。驅動程式具有預設重試政策,該政策使用指數退避和抖動來自動重試例外狀況,例如此狀況。指數退避的概念是針對連續的錯誤回應,在重試之間使用逐步較長的等待時間。

InvalidSessionException

訊息:交易 transactionId 已過期

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

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

InvalidSessionException

訊息:Session sessionId 已過期

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 支援 中心

LimitExceededException

訊息:超過工作階段限制

分類帳超過作用中工作階段數量的配額 (也稱為限制)。此配額在 中定義Amazon QLDB 中的配額和限制。分類帳的作用中工作階段計數最終一致,而且在配額附近持續執行的分類帳可能會定期看到此例外狀況。

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

QldbClientException

訊息:串流結果只有在父交易開啟時有效

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

當用戶端直接使用 Transaction 物件,且嘗試在遞交或取消交易後從 QLDB 擷取結果時,會發生此例外狀況。若要緩解此問題,用戶端必須先讀取資料,才能關閉交易。