翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon QLDBドライバーからの一般的なエラー
重要
サポート終了通知: 既存のお客様は、07/31/2025 のサポート終了QLDBまで Amazon を使用できます。詳細については、「Amazon Ledger QLDB を Amazon Aurora Postgre に移行するSQL
このセクションでは、QLDBセッション APIを操作するときに Amazon QLDBドライバーによってスローされるランタイムエラーについて説明します。
以下は、ドライバーによって返される一般的な例外の一覧です。それぞれの例外には、特定のエラーメッセージに加え、簡単な説明と考えられる解決方法に関する推奨事項が記載されています。
- 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 は、発信者の ID に基づいてクライアントをスロットリングしました。QLDB は、トークンバケット
スロットリングアルゴリズムを使用して、リージョンごと、アカウントごとにスロットリングを適用します。QLDB は、サービスのパフォーマンスを向上させ、すべてのQLDBお客様に公平な使用を保証するためにこれを行います。たとえば、 StartSessionRequest
オペレーションを使用して多数の同時セッションを取得しようとすると、スロットリングが発生する可能性があります。アプリケーションの正常性を維持し、さらなるスロットリングを軽減するために、エクスポネンシャルバックオフおよびジッター
を使用してこの例外を再試行できます。エクスポネンシャルバックオフは、再試行間の待機時間を累進的に長くして、連続的なエラー応答に対処するという概念に基づいています。最新バージョンのQLDBドライバーを使用することをお勧めします。このドライバーには、エクスポネンシャルバックオフとジッターを使用するデフォルトの再試行ポリシーがあり、こうした例外発生時に自動的に再試行します。 最新バージョンのQLDBドライバーは、アプリケーションが
StartSessionRequest
呼び出しQLDBのために によって一貫してスロットリングされている場合にも役立ちます。このドライバーは、トランザクション間で再利用されるセッションのプールを維持します。これにより、アプリケーションが行うStartSessionRequest
コールの回数を減らすことができます。スロットリング制限の引き上げをリクエストするには、 API AWS Support センターにお問い合わせください。 - LimitExceededException
-
メッセージ:
セッション制限を超えました
台帳が、アクティブなセッション数のクォータ (制限とも呼ばれる) を超えました。このクォータは Amazon のクォータと制限 QLDB で定義されています。台帳のアクティブセッション数は結果的に一貫しており、常時クォータ付近で実行している台帳の場合、この例外が定期的に表示される場合があります。
アプリケーションの正常性を維持するために、この例外を再試行することをお勧めします。この例外を回避するには、すべてのクライアントで単一台帳で使用する同時セッションが 1,500 を超えないようにしてください。例えば、Java 用 Amazon QLDBドライバーの
maxConcurrentTransactions メソッドを使用して、ドライバーインスタンスで使用可能なセッションの最大数を設定できます。 - QldbClientException
-
メッセージ:
ストリームされた結果は、親トランザクションが開いている場合にのみ有効です
トランザクションは閉じられ、 から結果を取得するために使用することはできませんQLDB。トランザクションは、コミットまたはキャンセルされると終了します。
この例外は、クライアントが
Transaction
オブジェクトを直接操作していて、トランザクションをコミットまたはキャンセルQLDBした後に から結果を取得しようとしている場合に発生します。この問題を軽減するには、クライアントはトランザクションを閉じる前にデータを読み取る必要があります。