Sql-Server

如果在發布者數據庫上執行大量更新/刪除查詢,事務複製是否會中斷

  • January 13, 2016

對於這些規格:

  • 發布者:(產品 OLTP DB 伺服器)SQL Server 2005,數據庫大小:220 GB 也充當分發者
  • 訂閱者(Prod 報告數據庫伺服器):SQL Server 2005,數據庫被複製並且目前處於同步狀態。

現在,根據年度活動,將在 OLTP 發布者數據庫上執行一個腳本來刪除超過 3516009 條記錄。

請建議這是否中斷transaction replication?或者有什麼方法可以阻止一個,因為設置它很乏味?

此外,兩年前做過類似的事情,我們只有錯誤為

程序無法在 ‘xxxxxx’ 上執行 ‘sp_replcmds’。" “狀態:2,程式碼:0,文本:‘超時已過期’” “等待記憶體資源執行查詢時發生超時。” “代理 ‘xxx ’ 出錯後重試。嘗試了 0 次重試。有關詳細資訊,請參閱作業文件夾中的代理作業歷史記錄。” “由於停止作業請求,該步驟被取消(停止)”"

當時所做的修復是增加日誌讀取器代理的查詢超時時間,並將其從預設值 1800 設置為最大 65333 秒。

由於數據庫在過去 2 年中不斷增長,我們想知道,如果上述修復仍然很好,還是我們應該採取任何措施?

此外,如果複製中斷,什麼是恢復它的最快方法,因為設置整個事情(尤其是 SQL Server 2005)會導致報告伺服器出現大中斷?

聽起來您正試圖在單個事務中執行刪除操作。在這種情況下,答案是*“是的,它很可能會破裂”。*

即使沒有複製,在單個批次中執行如此大的操作也是一個壞主意。您最好循環較少數量的刪除 - 它更快且性能問題更少。如果你這樣做,答案是,“不,這不應該是一個問題。”

這是一個例子

Declare @keepGoing bit
set @keepGoing = 1

while @keepGoing =1
begin

   if (select top 1 from someTable) is null
       set @keepGoing = 0
   else
       delete sometable where ID in (select top 10000 ID from sometable)

end

引用自:https://dba.stackexchange.com/questions/126128