欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > MySQL刪除數據,表文件大小依然沒變的原因

MySQL刪除數據,表文件大小依然沒變的原因

熱門標簽:百度地圖圖標標注中心 石家莊電商外呼系統 芒果電話機器人自動化 湖南人工外呼系統多少錢 廣東人工電話機器人 日照旅游地圖標注 信陽穩定外呼系統運營商 申請外呼電話線路 南通自動外呼系統軟件

對于運行很長時間的數據庫來說,往往會出現表占用存儲空間過大的問題,可是將許多沒用的表刪除之后,表文件的大小并沒有改變,想解決這個問題,就需要了解 InnoDB 如何回收表空間的。

對于一張表來說,占用空間重要分為兩部分,表結構和表數據。通常來說,表結構定義占用的空間很小。所以空間的問題主要和表數據有關。

在 MySQL 8.0 前,表結構存儲在以 .frm 為后綴的文件里。在 8.0,允許將表結構定義在系統數據表中。

關于表數據的存放

可以將表數據存在共享表空間,或者單獨的文件中,通過 innodb_file_per_table 來控制。

  • 如果為 OFF ,表示存在系統共享表空間中,和數據字典一起
  • 如果為 ON,每個 InnoDB 表結構存儲在 .idb 為后綴的文件中

在 5.6.6 以后,默認值為 ON.

建議將該參數設置為 ON,這樣在不需要時,通過 drop table 命令,系統就會直接刪除該文件。

但在共享表空間中,即使表刪掉,空間也不會回收。

truncate = drop + create 

數據刪除流程

但有時使用 delete刪除數據時,僅僅刪除的是某些行,但這可能就會出現表空間沒有被回收的情況。

我們知道,MySQL InnoDB 中采用了 B+ 樹作為存儲數據的結構,也就是常說的索引組織表,并且數據時按照頁來存儲的。

在刪除數據時,會有兩種情況:

  • 刪除數據頁中的某些記錄
  • 刪除整個數據頁的內容

比如想要刪除 R4 這條記錄:

InnoDB 直接將 R4 這條記錄標記為刪除,稱為可復用的位置。如果之后要插入 ID 在 300 到 700 間的記錄時,就會復用該位置。由此可見,磁盤文件的大小并不會減少。

而且記錄的復用,只限于符合范圍條件的數據。之后要插入 ID 為 800 的記錄,R4 的位置就不能被復用了。

再比如要是刪除了整個數據頁的內容,假設刪除 R3 R4 R5,為 Page A 數據頁。

這時 InnoDB 就會將整個 Page A 標記為刪除狀態,之后整個數據都可以被復用,沒有范圍的限制。比如要插入 ID=50 的內容就可以直接復用。

并且如果兩個相鄰的數據頁利用率都很小,就會把兩個頁中的數據合到其中一個頁上,另一個頁標記為可復用。

綜上,無論是數據行的刪除還是數據頁的刪除,都是將其標記為刪除的狀態,用于復用,所以文件并不會減小。對應到具體的操作就是使用 delete 命令.

而且,我們還可以發現,對于第一種刪除記錄的情況,由于復用時會有范圍的限制,所以就會出現很多空隙的情況,比如刪除 R4,插入的卻是 ID=800.

插入操作也會造成空隙

在插入數據時,如果數據按照索引遞增順序插入,索引的結構會是緊湊的。但如果是隨機插入的,很可能造成索引數據頁分裂。

比如給已滿的 Page A 插入數據。

由于 Page A 滿了,所以要申請 Page B,調整 Page A 的過程到 Page B,這也稱為頁分裂。

結束后 Page A 就有了空隙。

另外對于更新操作也是,先刪除再插入,也會造成空隙。

進而對于大量進行增刪改的表,都有可能存在空洞。如果把空洞去掉,自然空間就被釋放了。

使用重建表

為了把表中的空隙去掉,這時就可以采用重新建一個與表 A 結構相同的表 B,然后按照主鍵 ID 遞增的順序,把數據依次插入到 B 表中。

由于是順序插入,自然 B 表的空隙不存在,數據頁的利用率也更高。之后用表 B 代替表 A,好像起到了收縮表 A 空間的作用。

具體通過:

alter table A engine=InnoDB

在 5.5 版本后,該命令和上面提到的流程差不多,而且 MySQL 會自己完成數據,交換表名,刪除舊表的操作。

但這就有一個問題,在 DDL 中,表 A 不能有更新,此時有數據寫入表 A 的話,就會造成數據丟失。

在 5.6 版本后引入了 Online DDL。

Online DDL

Online DDL 在其基礎上做了如下的更新:

重建表的過程如下:

  1. 建立一個臨時文件,掃描表 A 主鍵的所有數據頁。
  2. 用生成的數據頁生成 B+ 樹,存儲到臨時文件中。
  3. 生成臨時文件時,如果有對 A 的操作,將其記錄在日志文件中,對應圖中 state 2 的狀態。
  4. 臨時文件生成后,將日志文件應用到臨時文件中,得到與 A 表相同的數據文件,對應 state 3 狀態。
  5. 用臨時文件替換 A 表的數據文件。

由于 row log 日志文件存在,可以在重建表示,對表 A 進行 DML 操作。

需要注意的是,在 alter 語句執行前,會先申請 MDL 寫鎖,但在拷貝數據前會退化成 MDL 讀鎖,從而支持 DML 操作。

至于為什么不大 MDL 去掉,是防止其他線程對這個表同時做 DDL 操作。

對于大表來說,該操作很耗 IO 和 CPU 資源,所以在線上操作時,要控制操作時間。如果為了保證安全,推薦使用 gh-ost 來遷移。

Online 和 inplace

首先說一下 inplace 和 copy 的區別:

在 Online DDL 中,表 A 重建后的數據放在 tmp_file 中,這個臨時文件是在 InnoDB 內部創建出來的。整個 DDL 在 InnoDB 內部完成。進而對于 Server 層來說,并沒有數據移動到臨時表中,是一個 "原地" 操作,所以叫 "inplace" .

而在之前普通的 DDL 中,創建后的表 A 是在 tmp_table 是 Server 創建的,所以叫 "copy"

對應到語句其實就是:

-- alter table t engine=InnoDB 默認為下面
alter table t engine=innodb,ALGORITHM=inplace;

-- 走的就是 server 拷貝的過程
alter table t engine=innodb,ALGORITHM=copy;

需要注意的是 inplace 和 Online 并不是對應關系:

  1. DDL 過程是 Online,則一定是 inplace
  2. 如果是 inplace 的 DDL 不應當是 Online,如在 = 8.0, 添加全文索引和空間索引就屬于這種情況。

拓展

說一下 optimize,analyze,alter table 三種重建表之間的區別:

  1. alter table t engine = InnoDB(也就是 recreate)默認的是 Oline DDL 過程。
  2. analyze table t 不是重建表,僅僅是對表的索引信息做重新統計,沒有修改數據,期間加 MDL 讀鎖。
  3. optimize table t 等于上兩步的操作。

在事務里面使用 alter table 默認會自動提交事務,保持事務一致性

如果有時,在重建某張表后,空間不僅沒有變小,甚至還變大了一點點。這時因為,重建的這張表本身沒有空隙,在 DDL 期間,剛好有一些 DML 執行,引入了一些新的空隙。

而且 InnoDB 不會把整張表填滿,每個頁留下 1/16 給后續的更新用,所以可能遠離是緊湊的,但重建后變成的稍有空隙。

總結

現在我們知道,在使用 delete 刪除數據時,其實對應的數據行并不是真正的刪除,InnoDB 僅僅是將其標記成可復用的狀態,所以表空間不會變小。

通常來說,在標記復用空間時分為兩種,一種是僅將某些數據頁中的位置標記為刪除狀態,但這樣的位置只會在一定范圍內使用,會出現空隙的情況。

另一種是將整個數據頁標記成可復用的狀態,這樣的數據頁沒有限制,可直接復用。

為了解決這個問題,我們可以采用重建表的方式,其中在 5.6 版本后,創建表已經支持 Online 的操作,但最后是在業務低峰時使用

以上就是MySQL刪除數據,表文件大小依然沒變的原因的詳細內容,更多關于MySQL表文件大小的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • MyBatis批量插入/修改/刪除MySql數據
  • mysql利用mysqlbinlog命令恢復誤刪除數據的實現
  • mysql5.7.33誤刪除ibdata文件找回數據的方法
  • mysql數據庫刪除重復數據只保留一條方法實例
  • mysql 大表批量刪除大量數據的實現方法
  • 淺談為什么MySQL不建議delete刪除數據
  • Python批量刪除mysql中千萬級大量數據的腳本分享
  • Mysql刪除數據以及數據表的方法實例
  • MySQL 快速刪除大量數據(千萬級別)的幾種實踐方案詳解
  • MySQL Delete 刪數據后磁盤空間未釋放的原因

標簽:牡丹江 惠州 沈陽 天津 阿里 公主嶺 呼和浩特 合肥

巨人網絡通訊聲明:本文標題《MySQL刪除數據,表文件大小依然沒變的原因》,本文關鍵詞  MySQL,刪除,數據,表,文件,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《MySQL刪除數據,表文件大小依然沒變的原因》相關的同類信息!
  • 本頁收集關于MySQL刪除數據,表文件大小依然沒變的原因的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    青青草视频成人| 日韩一区二区精品| 久久久久久黄色| 免费成人美女在线观看.| 岛国精品一区二区三区| 91久久国产最好的精华液| 国产精品久久久一本精品| 丁香婷婷深情五月亚洲| 日本黄色免费片| 国产精品国产精品国产专区不蜜 | 老女人性淫交视频| 亚洲国产经典视频| 国产成人精品www牛牛影视| 欧美一级特黄高清视频| 中文字幕+乱码+中文字幕一区| 国产精品一品视频| 日韩欧美123区| 1区2区3区欧美| 91片在线免费观看| 欧美日韩一级片网站| 亚洲电影在线免费观看| 香蕉视频污视频| 欧美一卡二卡三卡四卡| 日本vs亚洲vs韩国一区三区| 久久丫精品国产亚洲av不卡| 精品国产一区二区三区久久久蜜月| 久久精品99国产精品日本| 国产99在线 | 亚洲| 国产精品网站导航| 99久久99久久久精品齐齐| 欧美亚洲一区二区三区四区| 亚洲成人综合网站| 色噜噜在线观看| 久久久另类综合| 成人激情小说网站| 欧美私模裸体表演在线观看| 亚洲成av人影院| 日韩人妻无码精品综合区| 国产日韩精品一区| 北条麻妃一区二区三区| 欧美日韩一区二区三区不卡| 日韩精品欧美精品| 超碰97av在线| 亚洲视频中文字幕| 艳妇乳肉豪妇荡乳xxx| 精品免费一区二区三区| 粉嫩av一区二区三区在线播放| 日本乱人伦aⅴ精品| 五月激情综合婷婷| 亚洲精品国产精品国自| 最新国产精品久久精品| 精品1卡二卡三卡四卡老狼| 亚洲精品在线一区二区| 成人禁用看黄a在线| 欧美一区二区三区日韩视频| 国产一区久久久| 欧美吻胸吃奶大尺度电影 | 欧美综合在线视频| 日韩电影免费在线| 少妇视频一区二区| 亚洲国产成人porn| 男人天堂资源网| 亚洲国产美国国产综合一区二区| av电影在线不卡| 一区二区三区蜜桃网| 日本激情小视频| 一级做a爱片久久| 日韩av片在线| 亚洲成人动漫在线免费观看| youjizz亚洲女人| 亚洲地区一二三色| 色哟哟一一国产精品| 亚洲成在人线免费| 粉嫩av性色av蜜臀av网站| 日韩黄色在线观看| a级片在线观看免费| 麻豆91精品91久久久的内涵| 色久综合一二码| 韩日av一区二区| 7777精品久久久大香线蕉| 国产激情一区二区三区四区| 欧美精品一二三| 粉嫩一区二区三区在线看| 日韩精品影音先锋| 无码国产精品久久一区免费| 国产日韩欧美不卡| 日韩高清一区在线| 日韩欧美综合视频| 另类的小说在线视频另类成人小视频在线 | 福利一区福利二区| 日韩你懂的在线观看| 91丨porny丨最新| 欧美国产精品中文字幕| 亚洲乱码国产乱码精品精大量| 亚洲欧美激情插| 娇小11一12╳yⅹ╳毛片| 人人狠狠综合久久亚洲| 欧美日韩一级二级三级| 成人福利在线看| 国产免费久久精品| 扒开jk护士狂揉免费| 亚洲国产日日夜夜| 在线视频欧美精品| 成人一级视频在线观看| 国产亚洲成av人在线观看导航| 好吊一区二区三区视频| 亚洲一二三四区不卡| 在线一区二区三区| 成人91在线观看| 国产精品毛片久久久久久| 极品久久久久久久| 精品亚洲成av人在线观看| 欧美一区二区三区思思人| 天天躁日日躁狠狠躁免费麻豆| 亚洲精品欧美专区| 色综合色狠狠天天综合色| 国产精品一区二区在线播放| 欧美精品一区二区三区蜜桃| 熟女人妻在线视频| 日韩精品福利网| 91精品中文字幕一区二区三区| 亚洲性图第一页| 亚洲免费伊人电影| 日韩在线中文字幕视频| 国产综合久久久久影院| wwwwxxxxx欧美| 亚洲一区二区三区日韩| 美女一区二区在线观看| 欧美一级久久久久久久大片| 久久久高清视频| 天堂一区二区在线| 欧美一二三四在线| 久久久无码人妻精品一区| 青青草精品视频| 日韩精品一区二区三区蜜臀| 中文字幕高清视频| 久久超碰97中文字幕| 久久综合久久综合亚洲| 山东少妇露脸刺激对白在线| 国产精品一级在线| 国产精品久久久久久久久晋中| 农村妇女精品一区二区| av不卡免费电影| 一区二区三区在线免费播放| 欧美日韩一区二区在线观看| 妖精视频一区二区| 免费观看在线色综合| 久久女同精品一区二区| 精品一区二区免费在线观看| 久久精品亚洲精品国产欧美kt∨ | 久久只有这里有精品| 国产中文字幕精品| 国产精品久久久久影院老司| 在线影院国内精品| 成人在线视频免费播放| 久久99精品久久久久婷婷| 国产欧美日韩视频在线观看| 成人羞羞国产免费图片| 中文字幕无人区二| 麻豆高清免费国产一区| 亚洲国产精品黑人久久久| 91九色02白丝porn| 久久久久国产精品区片区无码| 狠狠v欧美v日韩v亚洲ⅴ| 国产精品入口麻豆九色| 精品视频在线看| 亚洲区免费视频| 国产成人免费在线视频| 一区二区三区免费观看| 精品少妇一区二区三区日产乱码 | 99精品视频在线免费观看| 亚洲制服欧美中文字幕中文字幕| 欧美精品高清视频| 欧美日韩中文字幕视频| 一卡二卡三卡四卡五卡| 蜜臀久久99精品久久久久宅男 | 亚洲国产精品无码久久久久高潮 | 美国精品在线观看| 国产精品欧美一级免费| 欧美手机在线视频| 亚洲最大成人综合网| 97se狠狠狠综合亚洲狠狠| 麻豆久久一区二区| 亚洲免费电影在线| 精品对白一区国产伦| av电影在线观看一区| 午夜视频一区二区| 欧美激情在线看| 7777精品久久久大香线蕉| 性生交大片免费全黄| 亚洲婷婷在线观看| 成人高清视频在线| 免费成人结看片| 一区2区3区在线看| 欧美国产成人精品| 日韩视频免费观看高清完整版| a级片在线观看免费| 日韩中文字幕有码| 中国xxxx性xxxx产国| 国产+成+人+亚洲欧洲自线|