<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在日常開發中,你會發現當你刪除表的資料後,整個資料庫檔案大小還是沒有變化。這就是資料庫表的空間回收問題。
首先我們還是針對 MySQL 中應用最廣泛的 InnoDB 引擎展開討論。
一個 InnoDB 表包含兩部分,即:表結構定義和資料。
引數innodb_file_per_table的作用:
兩者的區別就是
show global variables where Variable_name = 'innodb_file_per_table'
從 MySQL 5.6.6 版本開始,它的預設值就是 ON 了。
總所周知MySQL資料結構是B+樹,現在假設刪除掉r4的記錄,InnoDB只會把r4這個記錄標記為刪除,如果之後插入一條10-20的記錄,就會複用這個r4的位置,但是磁碟檔案的大小並不會因為標記為刪除而減小,類似於假刪除。
當整個頁從B+樹裡面摘掉以後,可以複用到任何位置,可以儲存任何新增的資料。如果相鄰的兩個資料頁利用率都很小,系統就會把這兩個頁上的資料合到其中一個頁上,另外一個資料頁就被標記為可複用。
如果我們用delete命令把整個表的資料刪除呢?結果就是,所有的資料頁都會被標記為可複用。但是磁碟上,檔案不會變小。
實際上,delete命令其實只是把記錄的位置,或者資料頁標記為了“可複用”,但磁碟檔案的大小是不會變的。也就是說,通過delete命令是不能回收表空間的。這些可以複用,而沒有被使用的空間,看起來就像是“空洞”。
假設上圖PageA滿了,我們在新增一條資料8會怎樣.
可以看到,由於page A滿了,再插入一個ID是8的資料時,就不得不再申請一個新的頁面 page C來儲存資料了。
頁分裂完成後,page A的末尾就留下了空洞(注意:實際上,可能不止1 個記錄的位置是空洞)。
另外,更新索引上的值,可以理解為刪除一箇舊的值,再插入一個新值。不難理解,這也是會造 成空洞的。
也就是說,經過大量增刪改的表,都是可能是存在空洞的。
所以,如果能夠把這些空洞去掉,就 能達到收縮表空間的目的。 而重建表,就可以達到這樣的目的。
方式一:新建一張表結構一樣的表
方式二:alter table t engine=innodb,ALGORITHM=copy;(DDL)
可以使用**alter table t engine=innodb,ALGORITHM=copy;**命令來重建表。
在MySQL 5.5版本之前,這個命 令的執行流程跟我們前面描述的差不多,區別只是這個臨時表B不需要你自己建立,MySQL會自 動完成轉存資料、交換表名、刪除舊錶的操作。
顯然,花時間最多的步驟是往臨時表插入資料的過程,如果在這個過程中,有新的資料要寫入到 表A的話,就會造成資料丟失。因此,在整個DDL過程中,表A中不能有更新。也就是說,這個 DDL不是Online的。
方式三:alter table t engine=innodb,ALGORITHM=inplace;(Online DDL)
而在MySQL 5.6 M 版本開始引入的 版 Online DDL,之前的sql語句就變為了alter table t engine=innodb,ALGORITHM=inplace;
引入Online DDL的區別就是由於紀錄檔檔案記錄和重放操作這個功能的存在,這個方 案在重建表的過程中,允許對錶A做增刪改操作。這也就是Online DDL名字的來源。
在執行 alter table t engine=innodb,ALGORITHM=inplace; 語句的時候,需要獲取到MDL鎖,但是這個寫鎖在真正拷貝資料 之前就退化成讀鎖了。
Online DDL 其實是會先獲取MDL寫鎖, 再退化成MDL讀鎖;但MDL寫鎖持有時間比較短,所以可以稱為Online; 而MDL讀鎖,不阻止資料增刪查改,但會阻止其它執行緒修改表結構;
為什麼要退化呢?為了實現Online,MDL讀鎖不會阻塞增刪改操作。
那為什麼不乾脆直接解鎖呢?為了保護自己,禁止其他執行緒對這個表同時做DDL。
區別:
兩者的區別就是
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45