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

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

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

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

SQL Server

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

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

隔離モード ロックの取得 データの整合性
read_uncommitted なし 不要。
read_committed 一度に複数の行に対する共有ロック 一部。 追加されたレコードは 2 回(初期スナップショットで 1 回、ストリーミング フェーズで 1 回表示されます。
repeatable_read
(デフォルト)
すべての行への共有ロック 一部。 追加されたレコードは 2 回(初期スナップショットで 1 回、ストリーミング フェーズで 1 回表示されます。
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 Connector バージョン 1.3 をサポートしています。

Cloud Data Fusion の Oracle ソース

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

次のステップ