このページでは、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
隔離モードを使用します。このモードでは、スナップショット フェーズ中にテーブルがロックされません。
レプリケーション ジョブでスナップショット分離を有効にする
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 Connector バージョン 1.3 をサポートしています。
Cloud Data Fusion の Oracle ソース
Cloud Data Fusion の Oracle ソースからのレプリケーションには Datastream が利用されています。Datastream はテーブルをロックしません。
次のステップ
- レプリケーションの詳細。