BATCHSQL for Google Spanner Replicat操作でのエラーの処理
Google SpannerでBATCHSQLを使用する場合、次のエラーはGoldenGate Replicatによって管理されます。
- INSERT: 重複キー・エラー
- UPDATE/DELETE: 行が見つかりませんエラー
- 主キーの更新: キーが見つからないエラーと新しいキーがすでに存在するエラー
DML操作がこれらのエラーで失敗した場合、デフォルトではトランザクションは中止され、Replicatは異常終了します。ユーザーがHANDLECOLLISIONS、OVERRIDEDUPS、INSERT_MISSING_UPDATESまたはその他のREPERRORルールを有効にしている場合は、再試行、スキップまたは変更してからDMLを実行してエラーを解決します。
DML操作が他のエラーで失敗した場合、トランザクションは中断され、Replicatは異常終了します。または、REPERRORルールに基づいて、Replicatはトランザクション全体を中断して再試行します。
Cloud SpannerのRESOURCE_EXHAUSTEDエラーは、多くの場合、変更数または合計トランザクション・サイズに対するトランザクション制限を超過したことを示します。次のようなエラーが発生し、MAXTRANSOPSまたはBATCHTRANSOPSを減らすことが推奨されます。
Error: Operation failed on Spanner database due to quota, session limit, or batch size limit error:
Poosible causes :
BATCH LIMIT: Transaction >80,000 mutations or >100 MiB
QUOTA LIMIT: Spanner API quota exhausted (rate-limited)
SESSION LIMIT: Max concurrent sessions (100,000+) exceeded
Action:
For BATCH LIMIT: Reduce batch size or reduce MAXTRANSOPS and restart Replicat.
For QUOTA LIMIT: Increase Spanner quota in Google Cloud Console and restart Replicat.
For SESSION LIMIT: Reduce concurrent sessions to the Spanner and restart Replicat.
Retry using REPERROR with TRANSABORT, MAXRETRIES 5, DELAYSECS 1 is suggested.
Spanner Mutation APIの使用
パラメータBATCHSQL USEMUTATIONSは、スパナ・ミューテーションと呼ばれるスパナでDMLを適用する際の効率を高めるために必要です。
つまり、ExecuteBatchDmlは、操作が主に同じ表に対する連続挿入である初期ロード・シード・データにとって最も魅力的です。
リアルタイムDMLが混在する汎用ワークロードの場合、BATCHSQLのUSEMUTATIONモードではパフォーマンス・メトリックが向上します。
BATCHSQLのUSEMUTATIONSオプションの使用時の操作上の制限
Spanner Mutationsを使用する場合、次の制限があります。
-
衝突統計: コミット時変更の結果では、効果的に更新された挿入の数や、事実上挿入された行なし更新の数、またはスキップされた更新/削除操作の数が特定されないため、衝突統計は不完全です。
-
DMLレベルのREPERRORアクション: Spannerはバッファされた突然変異の文レベルの結果を返さず、コミット時にトランザクション全体にエラーが表示されるため、Spanner Mutationsを使用している間は、BATCHSQLモードの個々のDML文に
REPERRORアクションを適用できません。 -
行の削除操作がない: 欠落している行に対する削除操作は、SpannerのDeleteMutationセマンティクスによってスキップされるため、行の削除操作がない場合に、
USEMUTATIONSを使用する他のデータベースとは異なり、常に成功が返されます。 -
PK更新の通常モードへのフォールバック: Replicatは、主キー更新を含むトランザクションでは、PK更新が発生するとすぐにクラシック・モードで再試行されます。
これらの制限によりスパナ変更の動作は変更されませんが、パフォーマンスが低下する可能性があります。
USEMUTATIONSを使用したBATCHSQLモードの動作
次に、各GoldenGate BATCHSQLモードがSpanner変異型にどのようにマップされるかの概要を示します。
-
デフォルト・ケース:
1.1. 挿入: 重複キー挿入の場合、トランザクションは失敗し、コミット時にのみエラーが戻されます。
1.2. 更新: 行の更新がない場合、トランザクションは失敗し、コミット時にのみエラーが戻されます。
1.3. 削除: 行が
NOT_FOUNDの場合、削除をスキップします -
HANDLECOLLISIONS/OVERRIDEDUPS:2.1. 挿入: 重複キー・エラーの場合、挿入は更新に変換する必要があり、エラーはコミット時にのみ返され、PK衝突統計は含まれません。
2.2. 更新: 行欠落エラーの場合、更新はスキップされます。
**NOTE:** Spanner locks the row for that specific primary key using Replicat transaction even if it does not exist, which means that Spanner would not allow any other transaction to INSERT that row until Replicat transaction is committed or aborted. {: .infoboxnote}2.3. 削除: 行が
NOT_FOUNDの場合、DELETEMUTATIONは削除をスキップします。 -
欠落している更新を挿入:
3.1. 挿入: 重複キー挿入の場合、トランザクションは失敗し、コミット時にのみエラーが戻されます。
3.2. 更新: 行欠落エラーの場合、更新は行を挿入し、エラーはコミット時にのみ返されます。