MySQL大表刪除導致服務器變慢的分析

---注意,在生產環境中MySQL刪除表的時候  如果表過大,幾十G  甚至上百G ,刪除的時候要小心,要不然會導致MySQLhang住,從而影響業務;


1、MySQL在刪除表的時候,一共分爲2步:

①:buffer pool頁面清除的過程

  在刪除表的時候,innodb會將文件在buffer pool中對應的頁面清除,對於刪除表的頁面清除,只需要將頁面從flush隊列中刪除即可,而不需要去做flush操作,這樣就可以減少對系統的衝擊;


②:刪除ibd磁盤文件的過程(這個過程是很耗資源的也比較慢會影響數據庫的性能)


2、正確的刪除大表的姿勢:

①:對錶的系統文件做個硬鏈接,加速刪除

如:ln  /mysql/data/test/emp.ibd  /mysql/data/test/emp.ibd.hdlk


[mysql@db2 test]$ ln /mysql/data/test/emp.ibd /mysql/data/test/emp.ibd.hdlk

[mysql@db2 test]$ ls -l

total 208

-rw-r--r-- 1 mysql mysql    65 Mar  3 10:35 db.opt

-rw-rw---- 1 mysql mysql  8556 May 12 04:40 emp.frm

-rw-rw---- 2 mysql mysql 98304 May 12 04:40 emp.ibd

-rw-rw---- 2 mysql mysql 98304 May 12 04:40 emp.ibd.hdlk

[mysql@db2 test]$ 


然後在數據庫中執行:drop table  emp;  ---即可,



②:第二種方法就是分批刪除數據,設定一個條件有序的刪除,如:可以按照每天的數據刪除或按照一個範圍進行分批刪除,



---注意,在生產數據庫刪除表的時候,如果表數據量過大要麼分批刪除  要麼做硬鏈接的方式刪除;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章