標籤:

MySQL刪除大量數據的一些建議

生產環境,往往需要更新/刪除大量的數據,由於很可能消耗太多的IO資源,對於生產繁忙的系統,需要小心,以避免對生產環境造成影響。

刪除大量數據還有一些副作用,比如主從延時、數據文件無法收縮、鎖表等。

以下是一些要指引和規則:

1、批量刪除,這樣往往可以工作得更快,你可能需要在每次批量刪除前sleep一段時間,控制刪除的頻率,這樣的目的是減少對生產系統的IO衝擊,把符合平均分布,避免從庫滯後太多;

2、可以考慮分區表技術,我很少用分區表,但刪除一個分區,顯然比刪除大量數據簡單方便的多,這也是分區表清理/歸檔數據的優勢所在;

3、按照主鍵的序列分批分批,或者基於時間分批分批,你總可以找到一種方式批量刪除,如果實在沒有批量刪除的方式,可能你的表結構設計得不好;

4、基於硬體的性能,每批刪除的記錄數,可以選擇幾百到幾千到幾萬的數據量,但不要太大,MySQL很難同時處理好大事務和隨機小事務;

5、如果要刪除大部分數據,那麼可以考慮的方式是,創建一個新表,insert要保留的數據,然後切換表;

6、對於大表(InnoDB)刪除大量數據,如果是一個很大的事務,中止刪除數據的操作,可能需要幾倍的時間用於回滾,導致嚴重的IO瓶頸,而批量刪除可以讓我們的回滾恢復得快得多。

7、需要留意空間的釋放,選擇獨立表空間會更有利於釋放空間。


推薦閱讀:

為什麼php在向mysql提交數據時變數外要用單引號?
如何看待MySQL發布的Group Replication?
簡單說明下MySQL的內存使用
1.3 Mysql 安裝與使用-基礎配置-NodeJs+Express+Mysql實戰

TAG:MySQL |