疑難排解 Amazon QLDB - Amazon Quantum Ledger Database (Amazon QLDB)

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

疑難排解 Amazon QLDB

重要

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

以下各節提供您在使用 Amazon QLDB 時可能遇到的常見錯誤的彙總清單,以及如何進行故障診斷的指引。

如需 IAM 存取特定的疑難排解指引,請參閱 對 Amazon QLDB 身分和存取進行故障診斷

如需調校 PartiQL 陳述式的最佳實務,請參閱 最佳化查詢效能

使用 QLDB 驅動程式執行交易

本節列出當您使用 Amazon QLDB 驅動程式在總帳上執行 PartiQL 交易時,可以傳回的常見例外狀況。如需使用此功能的詳細資訊,請參閱「驅動程式入門」。如需設定和使用驅動程式的最佳實務,請參閱 驅動程式建議

每個例外狀況都包含特定的錯誤訊息,後面接著可能解決方案的簡短描述和建議。

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 擷取結果時,會發生此例外狀況。若要緩解此問題,用戶端必須先讀取資料,才能關閉交易。

匯出日誌資料

本節列出當您將日誌資料從總帳匯出至 Amazon S3 儲存貯體時,QLDB 可以傳回的常見例外狀況。如需使用此功能的詳細資訊,請參閱「從 Amazon QLDB 匯出日誌資料」。

每個例外狀況都包含特定的錯誤訊息,後面接著可能解決方案的簡短描述和建議。

AccessDeniedException

訊息:使用者:userARN 未獲授權執行:iam:PassRole on resource: roleARN

您沒有將 IAM 角色傳遞至 QLDB 服務的許可。QLDB 需要所有日誌匯出請求的角色,而且您必須具有將此角色傳遞給 QLDB 的許可。此角色會在您指定的 Amazon S3 儲存貯體中為 QLDB 提供寫入許可。

請確認您定義了 IAM 政策,該政策授予對 QLDB 服務 () 的指定 IAM 角色資源執行 PassRole API 操作的許可qldb.amazonaws.com。如需政策範例,請參閱Amazon QLDB 的身分型政策範例

IllegalArgumentException

訊息:QLDB 驗證 S3 組態時發生錯誤:errorCode errorMessage

此錯誤的可能原因是提供的 Amazon S3 儲存貯體不存在於 Amazon S3 中。或者,QLDB 沒有足夠的許可將物件寫入您指定的 Amazon S3 儲存貯體。

驗證您在匯出任務請求中提供的 S3 儲存貯體名稱是否正確。如需儲存貯體命名的詳細資訊,請參閱《Amazon Simple Storage Service 使用者指南》中的儲存貯體限制

此外,請確認您為指定的儲存貯體定義政策,以授予 QLDB 服務 () 的 PutObjectPutObjectAcl許可qldb.amazonaws.com。如需詳細資訊,請參閱 匯出許可

IllegalArgumentException

訊息:驗證 Amazon S3 S3 的非預期回應。來自 S3 的回應:errorCode errorMessage

嘗試將日誌匯出資料寫入提供的 S3 儲存貯體時,Amazon S3 錯誤回應失敗。如需可能原因的詳細資訊,請參閱《Amazon Simple Storage Service 使用者指南》中的故障診斷 Amazon S3

IllegalArgumentException

訊息:Amazon S3 儲存貯體字首不得超過 128 個字元

日誌匯出請求中提供的字首包含超過 128 個字元。

IllegalArgumentException

訊息:開始日期不得大於結束日期

InclusiveStartTimeExclusiveEndTime 都必須是 ISO 8601 日期和時間格式,以及國際標準時間 (UTC)。

IllegalArgumentException

訊息:結束日期不能是未來的日期

InclusiveStartTimeExclusiveEndTime 都必須是ISO 8601日期和時間格式,並以 UTC 表示。

IllegalArgumentException

訊息:提供的物件加密設定 (S3EncryptionConfiguration) 與 AWS Key Management Service (AWS KMS) 金鑰不相容

您已提供 ObjectEncryptionTypeKMSKeyArn NO_ENCRYPTIONSSE_S3。您只能 AWS KMS key 為 的物件加密類型提供受管的客戶SSE_KMS。若要進一步了解 Amazon S3 中的伺服器端加密選項,請參閱《Amazon S3 開發人員指南》中的使用伺服器端加密保護資料

LimitExceededException

訊息:超過 2 個同時執行日誌匯出任務的限制

QLDB 會強制執行兩個並行日誌匯出任務的預設限制。

串流日誌資料

本節列出當您將日誌資料從總帳串流到 Amazon Kinesis Data Streams 時,QLDB 可以傳回的常見例外狀況。如需使用此功能的詳細資訊,請參閱「從 Amazon QLDB 串流日誌資料」。

每個例外狀況都包含特定的錯誤訊息,後面接著可能解決方案的簡短描述和建議。

AccessDeniedException

訊息:使用者:userARN 未獲授權執行:iam:PassRole on resource: roleARN

您沒有將 IAM 角色傳遞至 QLDB 服務的許可。QLDB 需要所有日誌串流請求的角色,而且您必須具有將此角色傳遞給 QLDB 的許可。此角色會在您指定的 Amazon Kinesis Data Streams 資源中提供 QLDB 寫入許可。

請確認您定義了 IAM 政策,該政策授予對 QLDB 服務 () 的指定 IAM 角色資源執行 PassRole API 操作的許可qldb.amazonaws.com。如需政策範例,請參閱Amazon QLDB 的身分型政策範例

IllegalArgumentException

訊息:QLDB 驗證 Kinesis 資料串流時發生錯誤:來自 Kinesis 的回應:errorCode errorMessage

此錯誤的可能原因是提供的 Kinesis Data Streams 資源不存在。或者,QLDB 沒有足夠的許可將資料記錄寫入您指定的 Kinesis 資料串流。

驗證您在串流請求中提供的 Kinesis 資料串流是否正確。如需詳細資訊,請參閱《Amazon Kinesis Data Streams 開發人員指南》中的建立和更新資料串流。 Amazon Kinesis

此外,請確認您為指定的 Kinesis 資料串流定義政策,以將 QLDB 服務 (qldb.amazonaws.com) 許可授予下列動作。如需詳細資訊,請參閱串流許可

  • kinesis:PutRecord

  • kinesis:PutRecords

  • kinesis:DescribeStream

  • kinesis:ListShards

IllegalArgumentException

訊息:驗證 Kinesis 組態時,Kinesis Data Streams 的非預期回應。Kinesis 的回應:errorCode errorMessage

嘗試將資料記錄寫入提供的 Kinesis 資料串流失敗,並出現提供的 Kinesis 錯誤回應。如需可能原因的詳細資訊,請參閱《Amazon Kinesis Data Streams 開發人員指南》中的疑難排解 Amazon Kinesis Data Streams 生產者Amazon Kinesis

IllegalArgumentException

訊息:開始日期不得大於結束日期。

InclusiveStartTimeExclusiveEndTime 都必須是 ISO 8601 日期和時間格式,以及國際標準時間 (UTC)。

IllegalArgumentException

訊息:開始日期不能是未來的日期。

InclusiveStartTimeExclusiveEndTime 都必須是ISO 8601日期和時間格式,並以 UTC 表示。

LimitExceededException

訊息:超過同時執行日誌串流至 Kinesis Data Streams 的 5 個限制

QLDB 會強制執行五個並行日誌串流的預設限制。

驗證日誌資料

本節列出當您在分類帳中驗證日誌資料時,QLDB 可以傳回的常見例外狀況。如需使用此功能的詳細資訊,請參閱「Amazon QLDB 中的資料驗證」。

每個例外狀況都包含特定的錯誤訊息,後面接著可擲回它的 API 操作、簡短描述,以及可能解決方案的建議。

IllegalArgumentException

訊息:提供的 Ion 值無效,無法剖析。

API 操作: GetDigest, GetBlock, GetRevision

在重試請求之前,請確定您提供有效的 Amazon Ion 值。

IllegalArgumentException

訊息:提供的區塊地址無效。

API 操作: GetDigest, GetBlock, GetRevision

在重試請求之前,請確定您提供有效的區塊地址。區塊地址是具有兩個欄位的 Amazon Ion 結構: strandIdsequenceNo

例如:{strandId:"BlFTjlSXze9BIh1KOszcE3",sequenceNo:14}

IllegalArgumentException

訊息:所提供摘要提示地址的序號超過字串的最新遞交記錄。

API 操作: GetDigest, GetBlock, GetRevision

您提供的摘要提示地址的序號必須小於或等於日誌鏈最新遞交記錄的序號。在重試請求之前,請確定您提供具有有效序號的摘要提示地址。

IllegalArgumentException

訊息:所提供區塊地址的字串 ID 無效。

API 操作: GetDigest, GetBlock, GetRevision

您提供的區塊地址必須具有與日誌的字串 ID 相符的字串 ID。在重試請求之前,請確定您提供具有有效鏈 ID 的區塊地址。

IllegalArgumentException

訊息:所提供區塊地址的序號超過字串的最新遞交記錄。

API 操作: GetBlock, GetRevision

您提供的區塊地址的序號必須小於或等於字串最新遞交記錄的序號。在重試請求之前,請確定您提供具有有效序號的區塊地址。

IllegalArgumentException

訊息:所提供區塊地址的字串 ID 必須符合所提供摘要提示地址的字串 ID。

API 操作: GetBlock, GetRevision

只有在文件修訂或區塊與您提供的摘要存在於相同的日誌鏈中時,您才能驗證文件修訂或區塊。

IllegalArgumentException

訊息:提供的區塊地址序號不得大於提供的摘要提示地址序號。

API 操作: GetBlock, GetRevision

您只能驗證您提供的摘要所涵蓋的文件修訂或區塊。這表示它在摘要提示地址之前已遞交至日誌。

IllegalArgumentException

訊息:在指定的區塊地址的 區塊中找不到提供的文件 ID。

API 操作: GetRevision

您提供的文件 ID 必須存在於您提供的區塊地址中。在重試您的請求之前,請確定這兩個參數一致。