---注意,在生産環境中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,如需轉載請自行聯系原作者