這篇文章主要為大家展示了“InnoDB中邏輯存儲結構的示例分析”,內容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習一下“InnoDB中邏輯存儲結構的示例分析”這篇文章吧。
在InnoDB中我們創(chuàng )建的表還有對應的索引數據都存儲在擴展名為.ibd 的文件中,這個(gè)文件路徑可以先通過(guò)查變量datadir
來(lái)得到,然后進(jìn)入對應的數據庫名目錄,會(huì )看到很多ibd,文件名就是表名,這里有兩種類(lèi)型的表空間,共享表空間(或者叫系統表空間)和獨立表空間文件。
對于共享表空間,所有的表數據和相應索引都存放在這里,而獨立表空間,就是每個(gè)表的數據和索引都存放在一個(gè)單獨的ibd文件中,在目前的MySQL版本中,默認都是使用的獨立表空間。
共享表空間文件名可以通過(guò)innodb_data_file_path
得到,
mysql> show variables like 'innodb_data_file_path'; +-----------------------+------------------------+ | Variable_name | Value | +-----------------------+------------------------+ | innodb_data_file_path | ibdata1:12M:autoextend | +-----------------------+------------------------+ 1 row in set (0.00 sec)
獨立和共享表空間可以通過(guò)innodb_file_per_table
切換,如果啟用了他,那么每張表內的數據就單獨放在一個(gè)表空間文件中,還需要注意,每個(gè)表的表空間只存儲數據、索引,其他類(lèi)的數據,如回滾信息、系統事務(wù)信息、二次寫(xiě)緩沖仍存儲在原始共享表空間中。
下面語(yǔ)句可以查看innodb_file_per_table
的狀態(tài)。
mysql> show variables like '%innodb_file_per_table'; +-----------------------+-------+ | Variable_name | Value | +-----------------------+-------+ | innodb_file_per_table | ON | +-----------------------+-------+ 1 row in set (0.01 sec)
修改innodb_file_per_table
狀態(tài)
set global innodb_file_per_table=0;
如果在innodb_file_per_table
等于0的情況下,也就是OFF關(guān)閉情況下,創(chuàng )建的表都會(huì )存放的系統共享的表空間中,比如下面的列子。
1.創(chuàng )建database_1數據庫 mysql> create database database_1; Query OK, 1 row affected (0.02 sec) 2. 當前狀態(tài) mysql> show variables like '%innodb_file_per_table'; +-----------------------+-------+ | Variable_name | Value | +-----------------------+-------+ | innodb_file_per_table | ON | +-----------------------+-------+ 1 row in set (0.01 sec) 3. 創(chuàng )建表 mysql> create table t1(id int(11)); Query OK, 0 rows affected, 1 warning (0.05 sec) 4. 查看ibd文件 root@hxl-PC:/var/lib/mysql/database_1# ls t1.ibd root@hxl-PC:/var/lib/mysql/database_1# 5. 關(guān)閉innodb_file_per_table后在創(chuàng )建表 mysql> set global innodb_file_per_table=0; Query OK, 0 rows affected (0.01 sec) mysql> create table t2(id int(11)); Query OK, 0 rows affected, 1 warning (0.05 sec) 6. 查看ibd文件 root@hxl-PC:/var/lib/mysql/database_1# ls t1.ibd
可以發(fā)現在關(guān)閉后,沒(méi)有創(chuàng )建新的ibd文件。
表空間又由段(segment)、區(extent)、頁(yè)(page)組成,引入一張網(wǎng)絡(luò )圖片。
表空間由段組成,他是一個(gè)邏輯結構,用來(lái)管理物理文件,常見(jiàn)的段有數據段、索引段、回滾段,每個(gè)段由N個(gè)區和32個(gè)零散的頁(yè)組成。
InnoDB存儲引擎表是索引組織的,所以數據就是索引,索引就是數據,通常情況下,創(chuàng )建一個(gè)索引的同時(shí)就會(huì )創(chuàng )建兩個(gè)段,分別為非葉子節點(diǎn)和葉子節點(diǎn)段。
區是由連續的頁(yè)組成的空間,無(wú)論如何,每個(gè)區的大小都是1MB。為了保證區域內頁(yè)面的連續性,InnoDB存儲引擎一次從磁盤(pán)申請4-5個(gè)區域。默認情況下,InnoDB存儲引擎的頁(yè)面大小為16KB,也就是有有64個(gè)連續頁(yè)面,16*64=1024=1M。
InnoDB1.2.x版本增加了參數innodb_page_size
,這個(gè)參數允許設置默認頁(yè)面大小為4K、8K,
頁(yè)是InnoDB存儲引擎磁盤(pán)管理的最小單位,默認16kb,可以通過(guò)參數innodb_page_size
設置頁(yè)大小為4K、8K、16K 。InnoDB為了實(shí)現不同的目的而設計了很多種頁(yè),InnoDB 存儲引擎中常見(jiàn)的頁(yè)面類(lèi)型有:
數據頁(yè)
undo頁(yè)面
系統頁(yè)面
事物數據頁(yè)面(交易系統頁(yè)面)
插入緩沖位圖頁(yè)
插入緩沖區空閑列表頁(yè)
未壓縮的二進(jìn)制大對象頁(yè)面
壓縮二進(jìn)制大對象頁(yè)面
可以通過(guò)以下命令查看大小。
mysql> show status like 'innodb_page_size'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | Innodb_page_size | 16384 | +------------------+-------+ 1 row in set (0.00 sec) mysql>
下面是InnoDB數據頁(yè)結構,它由七部分組成。
InnoDB存儲引擎是面向行的,頁(yè)里面又記錄著(zhù)行記錄的信息,也就是數據是按照行存儲的。行記錄數據又是按照行格式進(jìn)行存放的。每個(gè)頁(yè)存放的行記錄也是有硬性定義的,最多允許存放16KB/2-200行,也就是7992行。
InnoDB存儲引擎有兩種文件格式,一種叫Antelops,另外一種叫Barracuda。
在A(yíng)ntelope文件格式下,有compact和redundant兩種行記錄格式。
在Barracuda文件格式下,有compressed和dynamic兩種行記錄格式。
可以通過(guò)以下方式查看當前格式,其中Row_format就是對應行格式存儲類(lèi)型。
mysql> show table status \G; *************************** 1. row *************************** Name: t1 Engine: InnoDB Version: 10 Row_format: Dynamic Rows: 15 Avg_row_length: 1092 Data_length: 16384 Max_data_length: 0 Index_length: 0 Data_free: 0 Auto_increment: NULL Create_time: 2021-08-24 09:43:29 Update_time: 2021-08-24 14:43:35 Check_time: NULL Collation: utf8mb4_0900_ai_ci Checksum: NULL Create_options: Comment:
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站