[轉(zhuǎn)帖]記錄:SQL Server 將近一億行數(shù)據(jù)的清理過(guò)程
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
:記錄:SQL Server 將近一億行數(shù)據(jù)的清理過(guò)程 昨天下午,老客戶(hù)找到我,說(shuō)考勤系統(tǒng)非???,數(shù)據(jù)庫(kù)11個(gè)G的容量,光每天備份都很頭疼。 幾年前,考勤系統(tǒng)跟OA對(duì)接的項(xiàng)目是我做的,大致有一定了解,所以聽(tīng)到這個(gè)消息,我第一感覺(jué)是考勤機(jī)故障:同一條打卡記錄,重復(fù)寫(xiě)入數(shù)據(jù)庫(kù)。這個(gè)也是很多老式考勤系統(tǒng)的通病。 于是,祭出遠(yuǎn)程連接神器,查詢(xún)分析器里一看:9465萬(wàn)行數(shù)據(jù)。
于是,想當(dāng)然的 使用 delete 去刪除過(guò)期的考勤數(shù)據(jù)。此處省略不表。 接下來(lái)關(guān)閉遠(yuǎn)程連接神器,估摸幾個(gè)小時(shí)之后再連接進(jìn)去查看結(jié)果。 時(shí)鐘滴答滴答,幾個(gè)小時(shí)之后,查看結(jié)果,發(fā)現(xiàn)報(bào)錯(cuò):“數(shù)據(jù)庫(kù)的事務(wù)日志已滿(mǎn)。若要查明無(wú)法重用日志中的空間的原因,請(qǐng)參閱sys.databases中的log_reuse_wait_desc列"。 想起來(lái)了,delete 是全表掃描,full log,這樣肯定會(huì)爆掉。 于是,只能單獨(dú)分表,操作如下: 1、有用的數(shù)據(jù)單獨(dú)插入一個(gè)新表,select into new_table where date>='' ,由于使用了索引,,幾百萬(wàn)行的數(shù)據(jù) 也就花了幾秒時(shí)間 。 2、truncate table,不記錄日志,這樣才可以操作,將近一億行的數(shù)據(jù),秒刪。 3、再用單獨(dú)的新表還原回去。
The End 該文章在 2023/5/24 10:49:01 編輯過(guò) |
關(guān)鍵字查詢(xún)
相關(guān)文章
正在查詢(xún)... |