天天看點

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;  ---即可,

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

---注意,在生産資料庫删除表的時候,如果表資料量過大要麼分批删除  要麼做硬連結的方式删除;

本文轉自一個笨小孩51CTO部落格,原文連結: http://blog.51cto.com/fengfeng688/1951645,如需轉載請自行聯系原作者