大批量delete 優化方案

超過100萬以上數據 刪除的時候 會很是慢且產生大量日誌文件 最大的問題是內存爆表 致使得屢次重啓服務才能刪除整個庫 暫時提出初步優化方案優化

1.設置日誌爲簡單模式,處理完後恢復spa

ALTER DATABASE tcgpsdb SET RECOVERY SIMPLE --簡單模式
ALTER DATABASE tcgpsdb SET RECOVERY FULL --還原爲徹底模式日誌

2.delete的時候 會形成整表鎖定,因此採用分批刪除code

@onecount 這裏設置爲一百萬一次,能夠自由調節blog

declare @onecount int
set @onecount=1000000
print getdate()
while 1=1
begin
     delete top(@onecount) from XX where FSendTime<'2019-1-01'
     IF (@@rowcount<@onecount) BREAK;
     print getdate()
end

刪除一千多萬條數據耗時 注意:搜索時間字段有加索引索引

02  1 2019 11:25AM

(1000000 行受影響)
02  1 2019 11:26AM

(1000000 行受影響)
02  1 2019 11:27AM

(1000000 行受影響)
02  1 2019 11:27AM

(1000000 行受影響)
02  1 2019 11:28AM

(1000000 行受影響)
02  1 2019 11:28AM

(1000000 行受影響)
02  1 2019 11:29AM

(1000000 行受影響)
02  1 2019 11:29AM

(1000000 行受影響)
02  1 2019 11:30AM

(1000000 行受影響)
02  1 2019 11:31AM

(1000000 行受影響)
02  1 2019 11:31AM

(636657 行受影響)

 

另外還有 插入到新表而後 drop 老表 把新表改成原來表名 這種涉及停機 因此暫不考慮內存

以上方案仍是不夠理想,這裏拋磚迎玉 但願有更好的同窗能給出 更快速 更省內存的解決方案get

相關文章
相關標籤/搜索