Mysql 表空間和 資料頁空洞

2022-07-16 10:15:13 字數 1847 閱讀 3623

一、表空間

1、表空間: innodb 引擎儲存的最高層; 存放所有的資料

2、獨立表空間:mysql 版本5.6後預設開啟的單表單空間

(1)innodb 預設儲存引擎頁的大小為 16k ;預設表空間 大小為96k

(2)獨立表空間 開啟方式 innodb_file_per_table on 從mysql 5.6.6 開始,預設值 on

二、資料頁空洞

如果我們修改了 info表 的表結構 ,比如 給表新增注釋,發現

9440 dec 14 09:59 info.frm

磁碟上的 frm 表結構檔案 立刻被更新了。

那我們如果刪除一行資料呢? 從檔案更改時間上來看也是立刻修改了。

180224 dec 14 10:03 temp.ibd

但是 idb資料檔案 大小 180224卻沒有改變

那麼資料庫的刪除流程到底是怎麼樣的? 為什麼我們刪除一行,儲存的ibd檔案大小卻沒有改變,當我們點選 刪除表的時候,sql 引擎發生了什麼?

1、innodb 的刪除

為什麼 ibd 檔案不會變小?

2、整理資料頁的空洞

那麼,當一張表被更新插入,產生了資料空洞之後,如何整理資料頁,使得資料變得更緊湊呢?

可以採取重建表的操作 alter table,實際上這裡是 引擎自動完成了 轉存資料、交換表名、刪除舊表的操作 

mysql> alter table temp engine=innodb;

163840 dec 14 10:52 temp.ibd

3、測試資料頁的增長效果

新建一張 new_test 表

create table `new_test` (

`id` int(11) unsigned not null auto_increment,`name` char(255) default

null,primary

key(`id`)

) engine=innodb auto_increment=191 default charset=utf8mb4;

我們知道 初始 ibd檔案 的大小預設是 96k ,inndb 預設單個資料頁大小是16k,對 new_test 表進行資料增加,觀察 ibd檔案大小。

insert into new_test (name) value("leon」)

發現 當rows 增長時,ibd檔案大小增長規律如下:

idb檔案大小 vs rows

96k – 0~81

128k – 82~136

144k – 136~190

160k – 190~255

16k 增長對應 54條rows ,1條row算出來約等於 296.29b , 正好等於 char 255b + int(11) 44 = 299b 。

可以看出來的確是由連續的資料頁組成資料的。

4、資料空洞的復用

為了資料空洞的復用的問題,我們來刪除 new_test 表 1-180行中的 155-160 行 ,ibd檔案 原始大小為 144kb,當我們刪除 150-160 這時候,資料頁就有了 10條id 的空洞 ,此時表中id是 : 0-149 161 -180 共計 170條, 那麼這時候,插入20條 還是 10條 資料頁呢 ?

測試可得。插入20條,id到 201。表空間變為 160k,所以原來的資料頁存在空洞 可以被復用(??待理解!!)

---按照計算應該一條資料是800b,有十條空洞,再加入10條,應該是144kb+0.8*10=152kb,160k不是說明原來的空洞沒有復用上嗎??

原文:

臨時表空間和資料表空間

oracle臨時表空間主要用來做查詢和存放一些緩衝區資料。臨時表空間消耗的主要原因是需要對查詢的中間結果進行排序。重啟資料庫可以釋放臨時表空間,如果不能重啟例項,而一直保持問題sql語句的執行,temp表空間會一直增長。直到耗盡硬碟空間。網上有人猜測在磁碟空間的分配上,oracle使用的是貪心演算法...

oracle 臨時表空間 和資料表空間

oracle臨時表空間主要用來做查詢和存放一些緩衝區資料。臨時表空間消耗的主要原因是需要對查詢的中間結果進行排序。重啟資料庫可以釋放臨時表空間,如果不能重啟例項,而一直保持問題sql語句的執行,temp表空間會一直增長。直到耗盡硬碟空間。網上有人猜測在磁碟空間的分配上,oracle使用的是貪心演算法...

表空間和資料檔案

authot yeexun date 發表於 2010年12月26日 10 09 00 address jau 17 304 管理表空間和資料檔案 介紹表空間是資料庫的邏輯組成部分,從物理上講,資料庫資料存放在資料檔案中,從邏輯上講,資料庫則是存放在表空間中,表空間由乙個或是多個資料檔案組成。資料庫...