複製作業中的隔離層級

本頁面說明如何在 Cloud Data Fusion 複製工作中,在 Microsoft SQL Server 和 MySQL 資料庫快照中啟用交易隔離功能。

為資料庫設定複製作業時,工作會擷取來源資料表的初始快照。為確保資料一致性,請為這些資料表設定鎖定。

擷取初始快照後,系統會擷取來源的累進式變更,並在持續的複製程序中套用至 BigQuery 目標。

SQL Server

為了擷取 SQL Server 資料庫中來源資料表的變更,複製工作會使用 Debezium 連接器。在 snapshotting 階段,Debezium 會根據設定的 snapshot.isolation.mode 取得鎖定。

下表比較複本工作支援的隔離模式。

隔離模式 已取得的鎖 資料一致性
read_uncommitted 不用
read_committed 一次只對一批資料列設定共用鎖定 部分支援。新增的記錄可能會出現兩次:一次在初始快照中,一次在串流階段中。
repeatable_read
(預設)
所有資料列的共用鎖定 部分支援。新增的記錄可能會出現兩次:一次在初始快照中,一次在串流階段中。
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.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 不會鎖定資料表

後續步驟