このページでは、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
隔離モードを使用します。このモードでは、スナップショット フェーズ中にテーブルがロックされません。
レプリケーション ジョブでスナップショット分離を有効にする
SQL Server データベースでスナップショット分離を有効にします。
ALTER DATABASE DATABASE_NAME SET ALLOW_SNAPSHOT_ISOLATION ON
DATABASE_NAME
は SQL Server データベースの名前に置き換えます。ランタイム引数
snapshot.isolation.mode
をsnapshot
に設定します。詳細については、ランタイム引数をレプリケーション ジョブに渡すをご覧ください。
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 はテーブルをロックしません。
次のステップ
- レプリケーションの詳細。