前言
本文主要給大家介紹了關于Innodb中mysql快速刪除2T的大表的相關內容,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧
來,先來看小漫畫陶冶一下情操

OK,這里就說了。假設,你有一個表erp,如果你直接進行下面的命令
| drop table erp |
這個時候所有的mysql的相關進程都會停止,直到drop結束,mysql才會恢復執行。出現這個情況的原因就是因為,在drop table的時候,innodb維護了一個全局鎖,drop完畢鎖就釋放了。
這意味著,如果在白天,訪問量非常大的時候,如果你在不做任何處理措施的情況下,執行了刪大表的命令,整個mysql就掛在那了,在刪表期間,QPS會嚴重下滑,然后產品經理就來找你喝茶了。所以才有了漫畫中的一幕,你可以在晚上十二點,夜深人靜的時候再刪。
當然,有的人不服,可能會說:"你可以寫一個刪除表的存儲過程,在晚上沒啥訪問量的時候運行一次就行。"
我內心一驚,細想一下,只能說:"大家還是別抬杠了,還是聽我說一下業內通用做法。"
一個假設
先說明一下,在這里有一個前提,mysql開啟了獨立表空間,MySQL5.6.7之后默認開啟。
也就是在my.cnf中,有這么一條配置(這些是屬于mysql優化的知識,后期給大家介紹)
| innodb_file_per_table = 1 |
查看表空間狀態,用下面的命令
| mysql> show variables like '%per_table'; +-----------------------+-------+ | Variable_name | Value | +-----------------------+-------+ | innodb_file_per_table | OFF | +-----------------------+-------+ |
如果innodb_file_per_table的value值為OFF,代表采用的是共享表空間。
如果innodb_file_per_table的value值為ON ,代表采用的是獨立表空間。
于是,大家要問我,獨立表空間和共享表空間的區別?
共享表空間:某一個數據庫的所有的表數據,索引文件全部放在一個文件中,默認這個共享表空間的文件路徑在data目錄下。 默認的文件名為:ibdata1(此文件,可以擴展成多個)。注意,在這種方式下,運維超級不方便。你看,所有數據都在一個文件里,要對單表維護,十分不方便。另外,你在做delete操作的時候,文件內會留下很多間隙,ibdata1文件不會自動收縮。換句話說,使用共享表空間來存儲數據,會遭遇drop table之后,空間無法釋放的問題。
獨立表空間:每一個表都以獨立方式來部署,每個表都有一個.frm表描述文件,還有一個.ibd文件。
.frm文件:保存了每個表的元數據,包括表結構的定義等,該文件與數據庫引擎無關。
新聞熱點
疑難解答