本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon 故障 QLDB
重要
支援結束通知:現有客戶將能夠使用 Amazon,QLDB直到 2025 年 7 月 31 日終止支援為止。有關更多詳細信息,請參閱將 Amazon QLDB 分類帳遷移到 Amazon Aurora 郵政. SQL
以下各節提供使用 Amazon 時可能遇到的常見錯誤彙總清單QLDB,以及如何進行疑難排解的指導。
如需IAM存取特定的疑難排解指引,請參閱疑難排解 Amazon QLDB 身分和存取。
如需調整 PartiQL 陳述式的最佳作法,請參閱最佳化查詢效能。
使用QLDB驅動程式執行交易
本節列出 Amazon QLDB 驅動程式在分類帳上執行 PartiQL 交易時,可能傳回的常見例外狀況。如需使用此功能的詳細資訊,請參閱「開始使用驅動程式」。如需設定和使用驅動程式的最佳作法,請參閱司機推薦。
每個例外都包含特定的錯誤訊息,後面接著簡短的描述和可能解決方案的建議。
- CapacityExceededException
-
訊息:
容量超過
Amazon QLDB 拒絕了該請求,因為它超出了分類帳的處理能力。QLDB針對每個分類帳強制執行內部調整規模限制,以維持服務的健全狀況和效能。此限制會根據每個個別要求的工作負載大小而有所不同。例如,如果要求執行效率低下的資料交易 (例如,非索引限定查詢所產生的資料表掃描),工作負載可能會增加。
我們建議您等待,然後再重試請求。如果您的應用模組持續遇到此例外,請最佳化對帳單,並降低傳送至分類帳之請求的匯率與數量。陳述式最佳化的範例包括每個交易執行較少的陳述式以及調整資料表索引。若要瞭解如何最佳化陳述式並避免表格掃描,請參閱最佳化查詢效能。
我們也建議您使用最新版本的QLDB驅動程式。驅動程式具有預設的重試原則,該原則會使用指數輪詢和抖
動來自動重試例外狀況 (例如此類)。指數輪詢的概念是在連續錯誤響應的重試之間使用逐漸更長的等待時間。 - InvalidSessionException
-
訊息:
交易
transactionId
已過期交易超過其最大生命週期。在認可之前,交易最多可以執行 30 秒。在此逾時限制之後,對交易完成的任何工作都會遭到拒絕,並QLDB捨棄工作階段。此限制可透過啟動交易而不提交或取消工作階段來保護用戶端不會洩漏工作階段。
如果這是應用程式中常見的例外狀況,則可能是交易執行時間太長。如果交易執行階段的時間超過 30 秒,請最佳化陳述式以加速交易。陳述式最佳化的範例包括每個交易執行較少的陳述式以及調整資料表索引。如需詳細資訊,請參閱 最佳化查詢效能。
- InvalidSessionException
-
訊息:
工作階段
sessionId
已過期QLDB捨棄工作階段,因為它超出了其最大總存留期。QLDB無論作用中交易為何,都會在 13-17 分鐘後捨棄工作階段。工作階段可能會因為多種原因而遺失或受損,例如硬體故障、網路故障或應用程式重新啟動。因此,在工作階段上QLDB強制執行最長存留期,以確保用戶端軟體能夠抵禦工作階段失敗。
如果您遇到此例外狀況,建議您取得新的階段作業,然後重試該交易。我們也建議您使用最新版本的驅動程式,該QLDB驅動程式會代表應用程式管理工作階段集區及其健全狀況。
- InvalidSessionException
-
訊息:
沒有此類工作階段
客戶端嘗試QLDB使用不存在的會話進行交易。假設用戶端使用先前存在的工作階段,工作階段可能因為下列其中一種情況而不再存在:
-
如果工作階段涉及內部伺服器故障 (也就是HTTP回應碼為 500 的錯誤),QLDB可能會選擇完全捨棄工作階段,而不是允許客戶在不確定狀態的工作階段進行交易。然後,該會話上的任何重試嘗試都會失敗並顯示此錯誤。
-
過期的工作階段最終會被遺忘QLDB。然後,任何嘗試繼續使用會話都會導致此錯誤,而不是初始錯誤
InvalidSessionException
。
如果您遇到此例外狀況,建議您取得新的階段作業,然後重試該交易。我們也建議您使用最新版本的驅動程式,該QLDB驅動程式會代表應用程式管理工作階段集區及其健全狀況。
-
- RateExceededException
-
訊息:
超過比率
QLDB根據呼叫者的身份限制客戶端。QLDB使用權杖儲存貯體節流演算法針對每個區域、每個帳戶強制執行節流。
QLDB這樣做是為了幫助服務的性能,並確保所有QLDB客戶的公平使用。例如,嘗試使用該作業取得大量並行工 StartSessionRequest
作階段可能會導致節流。若要維持應用程式健康狀態並減輕進一步的節流,您可以使用指數輪詢
和抖動在此例外狀況上重試。指數輪詢的概念是在連續錯誤響應的重試之間使用逐漸更長的等待時間。我們建議使用最新版本的QLDB驅動程式。驅動程式具有預設的重試原則,該原則會使用指數輪詢和抖動來自動重試例外狀況 (例如此類)。 如果您的應用程序始終受到調用限制,則最新版本的QLDB驅動程序也可以提QLDB供
StartSessionRequest
幫助。驅動程式會維護跨交易重複使用的工作階段集區,這有助於減少應用程式進行的StartSessionRequest
呼叫次數。若要要求提高API節流限制,請聯絡中AWS Support 心。 - LimitExceededException
-
訊息:
超過工作階段限制
分類帳超過其作用中工作階段數目的配額 (也稱為限制)。此配額定義於中Amazon 的配額和限制 QLDB。分類帳的作用中階段作業計數最終是一致的,且持續在配額附近執行的分類帳可能會定期看到此例外。
為了維持應用程式的健康狀態,我們建議您重試此例外狀況。若要避免此例外狀況,請確定您尚未針對所有用戶端的單一分類帳設定超過 1,500 個並行階段作業。例如,您可以使用適用於 Java 的 Amazon QLDB 驅動程式maxConcurrentTransactions
方法來設定驅動程式 執行個體中可用工作階段的最大數目。 - QldbClientException
-
訊息:
只有在上階交易開啟時,串流的結果才有效
交易已關閉,無法用於從中擷取結果QLDB。交易在提交或取消時關閉。
當用戶端直接使用
Transaction
物件,並嘗試在提交或取消交易QLDB之後擷取結果時,就會發生此例外狀況。為了緩解此問題,客戶端必須在關閉交易之前讀取數據。
匯出分錄資料
本節列出將日誌資料從分類帳匯出到 Amazon S3 儲存貯體時QLDB可能傳回的常見例外狀況。如需使用此功能的詳細資訊,請參閱「從 Amazon 匯出日誌資料 QLDB」。
每個例外都包含特定的錯誤訊息,後面接著簡短的描述和可能解決方案的建議。
- AccessDeniedException
-
訊息:
使用者:
userARN
未授權PassRole 在資源上執行:iam:roleARN
您沒有將IAM角色傳遞給QLDB服務的權限。QLDB所有分錄匯出請求都需要角色,且您必須具有將此角色傳遞給的權限QLDB。該角色在您指定的 Amazon S3 儲存貯體中提QLDB供寫入許可。
確認您定義的IAM政策授與對QLDB服務 (
qldb.amazonaws.com
) 指定的IAM角色資源執行PassRole
API作業的權限。如需政策範例,請參閱「Amazon 的基於身份的政策示例 QLDB」。 - IllegalArgumentException
-
訊息:驗證 S3 組態
QLDB時發生錯誤:
errorCode
errorMessage
此錯誤的可能原因是提供的 Amazon S3 儲存貯體不存在於 Amazon S3 中。或者,QLDB沒有足夠的許可將物件寫入指定的 Amazon S3 儲存貯體。
確認您在匯出任務請求中提供的 S3 儲存貯體名稱正確無誤。如需有關儲存貯體命名的詳細資訊,請參閱 Amazon 簡單儲存服務使用者指南中的儲存貯體限制和限制。
另外,請確認您是否為指定值區定義了一個政策,以授予該QLDB服務 (
qldb.amazonaws.com
)PutObject
和PutObjectAcl
權限。如需進一步了解,請參閱匯出權限。 - IllegalArgumentException
-
訊息:驗證 S3 組態時,來自 Amazon S3 的
意外回應。來自 S3 的回應:
errorCode
errorMessage
嘗試將日誌匯出資料寫入提供的 S3 儲存貯體失敗,並顯示提供的 Amazon S3 錯誤回應。如需有關可能原因的詳細資訊,請參閱 Amazon 簡單儲存服務使用者指南中的疑難排解 Amazon S3。
- IllegalArgumentException
-
訊息:
Amazon S3 儲存貯體前綴不得超過 128 個字元
分錄匯出要求中提供的字首超過 128 個字元。
- IllegalArgumentException
-
訊息:
開始日期不得大於結束日期
InclusiveStartTime
和ExclusiveEndTime
必須為 ISO8601日期和時間格式,並且必須使用協調世界時()UTC。 - IllegalArgumentException
-
訊息:
結束日期不可為 future
InclusiveStartTime
和ExclusiveEndTime
必須使用ISO 8601
日期和時間格式以及 in UTC。 - IllegalArgumentException
-
訊息:
提供的物件加密設定 (S3EncryptionConfiguration) 與 AWS Key Management Service (AWS KMS) 金鑰不相容
您提
KMSKeyArn
供了一個ObjectEncryptionType
NO_ENCRYPTION
或SSE_S3
。您只能提供 AWS KMS key 針對物件加密類型所管理的客戶SSE_KMS
。若要進一步了解 Amazon S3 中的伺服器端加密選項,請參閱 Amazon S3 開發人員指南中的使用伺服器端加密保護資料。 - LimitExceededException
-
訊息:
已超過 2 個同時執行的「分錄」匯出工作的限
制QLDB強制執行兩個並行分錄匯出工作的預設限制。
串流日誌資料
本節列出將日誌資料從分類帳串流到 Amazon Kinesis 資料串流時QLDB可能傳回的常見例外狀況。如需使用此功能的詳細資訊,請參閱「從 Amazon 串流日誌資料 QLDB」。
每個例外都包含特定的錯誤訊息,後面接著簡短的描述和可能解決方案的建議。
- AccessDeniedException
-
訊息:
使用者:
userARN
未授權PassRole 在資源上執行:iam:roleARN
您沒有將IAM角色傳遞給QLDB服務的權限。QLDB所有日誌串流請求都需要角色,而且您必須擁有將此角色傳遞給的權限QLDB。該角色在您指定的 Amazon Kinesis Data Streams 源中提QLDB供寫入許可。
確認您定義的IAM政策授與對QLDB服務 (
qldb.amazonaws.com
) 指定的IAM角色資源執行PassRole
API作業的權限。如需政策範例,請參閱「Amazon 的基於身份的政策示例 QLDB」。 - IllegalArgumentException
-
訊息:驗證 Kinesis Data Streams
QLDB 時發生錯誤:來自 Kinesis 的回應:
errorCode
errorMessage
此錯誤的可能原因是提供的 Kinesis Data Streams 資源不存在。或者,QLDB沒有足夠的權限將資料記錄寫入指定的 Kinesis 資料串流。
確認您在串流請求中提供的 Kinesis 資料串流是否正確。如需詳細資訊,請參閱 Amazon Kinesis 資料串流開發人員指南中的建立和更新資料串流。
此外,請確認您是否為指定的 Kinesis 資料串流定義政策,以授與下列動作的 QLDB Service (
qldb.amazonaws.com
) 權限。如需詳細資訊,請參閱 串流權限。-
kinesis:PutRecord
-
kinesis:PutRecords
-
kinesis:DescribeStream
-
kinesis:ListShards
-
- IllegalArgumentException
-
訊息:在驗證 Kinesis 組態時,Kinesis 資料串流產
生非預期的回應。來自 Kinesis 的回應:
errorCode
errorMessage
嘗試將資料記錄寫入提供的 Kinesis 資料串流失敗,並顯示提供的 Kinesis 錯誤回應。如需有關可能原因的詳細資訊,請參閱 Amazon Kinesis Data Streams 開發人員指南中的 Amazon Kinesis Data Streams 生產者疑難排解。
- IllegalArgumentException
-
訊息:
開始日期不得大於結束日期。
InclusiveStartTime
和ExclusiveEndTime
必須為 ISO8601日期和時間格式,並且必須使用協調世界時()UTC。 - IllegalArgumentException
-
訊息:
開始日期不可為 future。
InclusiveStartTime
和ExclusiveEndTime
必須使用ISO 8601
日期和時間格式以及 in UTC。 - LimitExceededException
-
訊息:
已超過 5 個同時執行 Kinesis 資料串流的日誌串流
上限QLDB強制執行五個並行日誌串流的預設限制。
驗證分錄資料
本節列出當您核對分類帳中的分錄資料時,QLDB可以傳回的常見例外。如需使用此功能的詳細資訊,請參閱「Amazon 的數據驗證 QLDB」。
每個例外都包含特定的錯誤訊息,接著是可以擲回它的API作業、簡短描述,以及可能解決方案的建議。
- IllegalArgumentException
-
訊息:
提供的離子值無效且無法剖析
。API操作:
GetDigest, GetBlock, GetRevision
在重試請求之前,請確保您提供了有效的 Amazon Ion 值。
- IllegalArgumentException
-
訊息:
提供的區塊位址無效。
API操作:
GetDigest, GetBlock, GetRevision
在重試請求之前,請確保您提供了有效的阻止地址。區塊位址是具有兩個欄位的 Amazon Ion 結構:
strandId
和sequenceNo
。例如:
{strandId:"BlFTjlSXze9BIh1KOszcE3",sequenceNo:14}
- IllegalArgumentException
-
消息:提供
的摘要提示地址的序列號超出了鏈的最新提交記錄。
API操作:
GetDigest, GetBlock, GetRevision
您提供的摘要提示位址的序號必須小於或等於日誌串的最新認可記錄的序號。在重試您的請求之前,請確定您提供的摘要提示位址具有有效的序號。
- IllegalArgumentException
-
訊息:
所提供區塊位址的串 ID 無效。
API操作:
GetDigest, GetBlock, GetRevision
您提供的區塊位址必須具有與分錄串 ID 相符的串 ID。在重試請求之前,請確保您提供了一個帶有效鏈 ID 的塊地址。
- IllegalArgumentException
-
訊息:
所提供區塊位址的序號超出線條的最新提交記錄。
API操作:
GetBlock, GetRevision
您提供的塊地址的序列號必須小於或等於鏈的最新提交記錄的序列號。在重試請求之前,請確保您提供了一個包含有效序號的塊地址。
- IllegalArgumentException
-
消息:提供
的塊地址的鏈 ID 必須與提供的摘要提示地址的 Strand ID 匹配。
API操作:
GetBlock, GetRevision
如果文件修訂或區塊存在於與您提供的摘要相同的日誌鏈中,您才能驗證該文件修訂或區塊。
- IllegalArgumentException
-
訊息:
所提供區塊位址的序號不得大於所提供摘要提示位址的序號。
API操作:
GetBlock, GetRevision
只有在您提供的摘要涵蓋的文件修訂或區塊時,才能驗證該文件修訂或區塊。這意味著它是在摘要提示地址之前提交給日記的。
- IllegalArgumentException
-
訊息:
在指定區塊位址的區塊中找不到提供的文件 ID。
API操作:
GetRevision
您提供的文件 ID 必須存在於您提供的區塊位址中。在重試您的請求之前,請確保這兩個參數是一致的。