MySQL快速刪除大表

在網上看到的一個思想


  • 大表的刪除過程中,innodb存儲引擎會維護一個全局獨佔鎖,由於大表刪除時間長。使得其他操作夯住,造成線上的業務的不可用,所以我們要縮短大表的刪除時間。
  • DROP TABLE的內部原理:
    1.清除buffer pool中的flush list中與drop table有關的頁面
    2.刪除數據文件.ibd
  • 解決方法:
    關於flush list的頁面刪除我們無法對源碼進行修改來加速,所以只能從縮短刪除數據文件.ibd的時間下手,我們利用系統的硬鏈接的特性來刪除大表的.ibd文件。
  • 具體步驟:
    #建立Nums.ibd文件的硬鏈接
    1. ln  /mysqldata/node1/Nums/Nums.ibd /mysqldata/node1/Nums/Nums.ibd.bak
    #此時刪除表,只會刪除Nums.ibd和Nums.ibd.bak所共同指向的源文件的一個link節點Nums.ibd,也就是隻會進行一個減1操作
    2. drop table Nums;
    #在業務空閒時後臺循環分塊刪除.ibd,使用truncate
    3.使用腳本實現。。

每天早上6點去練車,回來之後學習學到晚上10點,蠻累得,堅持把。

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