BATCHSQL for Google Spanner Replicat操作でのエラーの処理

Google SpannerでBATCHSQLを使用する場合、次のエラーはGoldenGate Replicatによって管理されます。

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を使用する場合、次の制限があります。

これらの制限によりスパナ変更の動作は変更されませんが、パフォーマンスが低下する可能性があります。

USEMUTATIONSを使用したBATCHSQLモードの動作

次に、各GoldenGate BATCHSQLモードがSpanner変異型にどのようにマップされるかの概要を示します。

  1. デフォルト・ケース:

    1.1. 挿入: 重複キー挿入の場合、トランザクションは失敗し、コミット時にのみエラーが戻されます。

    1.2. 更新: 行の更新がない場合、トランザクションは失敗し、コミット時にのみエラーが戻されます。

    1.3. 削除: 行がNOT_FOUNDの場合、削除をスキップします

  2. 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. 欠落している更新を挿入:

    3.1. 挿入: 重複キー挿入の場合、トランザクションは失敗し、コミット時にのみエラーが戻されます。

    3.2. 更新: 行欠落エラーの場合、更新は行を挿入し、エラーはコミット時にのみ返されます。