レプリケーションの隔離レベル

このページでは、Cloud Data Fusion レプリケーション ジョブの Microsoft SQL Server と MySQL のデータベース スナップショットでトランザクション分離を有効にする方法について説明します。

データベースのレプリケーション ジョブを設定すると、ジョブはソーステーブルの初期スナップショットを取得します。データの整合性を維持するために、これらのテーブルをロックします。

最初のスナップショットの後で、ソースの増分変更がキャプチャされ、継続的なレプリケーション プロセスの一部として BigQuery ターゲットに適用されます。

SQL Server

SQL Server データベースのソーステーブルの変更をキャプチャするには、レプリケーション ジョブで Debezium コネクタを使用します。snapshotting フェーズで、Debezium は、構成された snapshot.isolation.mode に従ってロックを取得します。

次の表は、レプリケーション ジョブでサポートされている隔離モードを比較したものです。

分離モード ロックの取得 データの整合性
read_uncommitted なし 番号
read_committed 一度に複数の行に対する共有ロック 一部。 追加されたレコードは、最初のスナップショットで 1 回、ストリーミング フェーズで 1 回、合計 2 回出現できます。
repeatable_read
(デフォルト)
すべての行への共有ロック 一部。 追加されたレコードは、最初のスナップショットで 1 回、ストリーミング フェーズで 1 回、合計 2 回出現できます。
snapshot なし フル。
exclusive すべてのテーブルに対する排他ロック フル。

隔離モードの詳細については、トランザクション分離レベルを設定するをご覧ください。

デフォルトでは、スナップショット分離モードは repeatable_read です。このモードでは、スナップショット作成フェーズで読み取られたすべてのデータに対して共有ロックを取得します。これにより、他のトランザクションが既存の行を変更できなくなり、新しいレコードが挿入される可能性があります(ロックのエスカレーションをご覧ください)。

スナップショット分離を使用したレプリケーションは、テーブルをロックせずに完全なデータの一貫性を提供するため、ソース データベースですでに有効になっている場合にお勧めします。有効になっていない場合は、有効にする前に、SQL Server データベース エンジンでの行バージョニング ベースの隔離レベルの影響の詳細をご覧ください。

代わりに、read_committed 隔離モードを使用します。このモードでは、スナップショット フェーズ中にテーブルがロックされません。

レプリケーション ジョブでスナップショット分離を有効にする

  1. SQL Server データベースでスナップショット分離を有効にします。

    ALTER DATABASE DATABASE_NAME
    SET ALLOW_SNAPSHOT_ISOLATION ON
    

    DATABASE_NAME は SQL Server データベースの名前に置き換えます。

  2. ランタイム引数 snapshot.isolation.modesnapshot に設定します。詳細については、ランタイム引数をレプリケーション ジョブに渡すをご覧ください。

MySQL

MySQL データベースのソーステーブルで変更をキャプチャするために、レプリケーション ジョブは Debezium コネクタを使用します。snapshotting フェーズで、Debezium は、構成された snapshot.locking.mode に従ってロックを取得します。

デフォルトでは、スナップショットのロックモードは minimal です。このモードでは、データベース スキーマとその他のメタデータを読み取るときに、コネクタはスナップショットの最初の部分のグローバル読み取りロックを保持します。次に、コネクタは、REPEATABLE READ トランザクションを使用し、一貫した読み取りによってすべての行を取得します。これによって、テーブルがロックされることはありません。

ロックされないようにするには、モードを none に設定します。

代わりに、Cloud SQL で実行されている MySQL データベースのロックを回避するには、トランザクション データベースではなく、レプリカから複製します。

MySQL のスナップショット中のロック動作を変更する

  • MySQL データベースでスナップショットのロック動作を変更するには、ランタイム引数、snapshot.locking.mode プロパティを適切なロックモード値に設定します。

詳細については、Debezium 引数をレプリケーション ジョブに渡すをご覧ください。

制限事項

  • Cloud Data Fusion のレプリケーションでは、Debezium コネクタ バージョン 1.3 がサポートされています。

Cloud Data Fusion での Oracle ソース

Cloud Data Fusion の Oracle ソースからのレプリケーションには Datastream が利用されています。Datastream はテーブルをロックしません

次のステップ