Sql-Server
複製超過 160 億條記錄的表時如何解決鎖定問題
我有兩個要複製的 SQL Server 數據庫。我能夠毫無問題地複制小表。
但是,我有一個包含超過 160 億行的表,這很成問題。
我目前正在使用事務複製來複製大表。從我線上閱讀的文件中,當您選擇事務複製時,該過程使用 @sync_method = N’concurrent’ 參數,該參數不應該鎖定表,但是當我啟動該過程時,該表似乎已鎖定,這使其無法鎖定可用。同時,當我在目標伺服器上啟動訂閱時,它也會在目標伺服器上鎖定表。
我想知道失去了什麼或做錯了什麼導致表鎖定。請記住,當複制發生時,該表也在使用中。所以它不應該在任何給定時間鎖定。
已在數據庫上啟用讀取送出的快照隔離。這是我嘗試執行的初始快照。
一個有 160 億行的表需要更多的關注,並且無論你如何複製都需要更長的時間。
我有一個關於鎖定的類似問題,但它是在我的訂閱伺服器上而不是發布者上 - 很多個月前,正如你在這裡看到的那樣。
正如您在此處看到的,我在複製中的 READ_COMMITTED_SNAPSHOT 方面有很好的經驗。
發布者上的事務複製不會鎖定複製的表,這是這樣做 的:修改數據和日誌讀取器代理
但是,在初始化訂閱時或任何時候需要新的完整快照時,是的,表上會有鎖,但不會有獨占鎖,而且不會在整個快照期間鎖定:
並發快照處理(事務複製的預設設置)不會在整個快照生成期間保持共享鎖定,這允許使用者在複製創建初始快照文件時繼續不間斷地工作。
有這個問題處理同樣的問題:
解決這個問題的方法之一是
如果您在快照代理執行時談論表鎖,我認為避免它的唯一方法是在數據庫上啟用“讀取送出的快照隔離”,但只有在應用程序已經過測試時才必須這樣做這啟用了。