久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

InnoDB中邏輯存儲結構的示例分析

184次閱讀
沒有評論

共計 3659 個字符,預計需要花費 10 分鐘才能閱讀完成。

這篇文章主要為大家展示了“InnoDB 中邏輯存儲結構的示例分析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓丸趣 TV 小編帶領大家一起研究并學習一下“InnoDB 中邏輯存儲結構的示例分析”這篇文章吧。

InnoDB 邏輯存儲結構

在 InnoDB 中我們創建的表還有對應的索引數據都存儲在擴展名為.ibd 的文件中,這個文件路徑可以先通過查 mysql 變量 datadir 來得到,然后進入對應的數據庫名目錄,會看到很多 ibd,文件名就是表名,這里有兩種類型的表空間,共享表空間(或者叫系統表空間)和獨立表空間文件。

對于共享表空間,所有的表數據和相應索引都存放在這里,而獨立表空間,就是每個表的數據和索引都存放在一個單獨的 ibd 文件中,在目前的 MySQL 版本中,默認都是使用的獨立表空間。

共享表空間文件名可以通過 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)

獨立和共享表空間可以通過 innodb_file_per_table 切換,如果啟用了他,那么每張表內的數據就單獨放在一個表空間文件中,還需要注意,每個表的表空間只存儲數據、索引,其他類的數據,如回滾信息、系統事務信息、二次寫緩沖仍存儲在原始共享表空間中。

下面語句可以查看 innodb_file_per_table 的狀態。

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 狀態

set global innodb_file_per_table=0;

如果在 innodb_file_per_table 等于 0 的情況下,也就是 OFF 關閉情況下,創建的表都會存放的系統共享的表空間中,比如下面的列子。

1. 創建 database_1 數據庫
mysql  create database database_1;
Query OK, 1 row affected (0.02 sec)
2.  當前狀態
mysql  show variables like  %innodb_file_per_table 
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_file_per_table | ON |
+-----------------------+-------+
1 row in set (0.01 sec)
3.  創建表
mysql  create table t1(id int(11));
Query OK, 0 rows affected, 1 warning (0.05 sec)

5.  關閉 innodb_file_per_table 后在創建表 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

可以發現在關閉后,沒有創建新的 ibd 文件。

表空間又由段 (segment)、區(extent)、頁(page) 組成,引入一張網絡圖片。

1. 段

表空間由段組成,他是一個邏輯結構,用來管理物理文件,常見的段有數據段、索引段、回滾段,每個段由 N 個區和 32 個零散的頁組成。

InnoDB 存儲引擎表是索引組織的,所以數據就是索引,索引就是數據,通常情況下,創建一個索引的同時就會創建兩個段,分別為非葉子節點和葉子節點段。

2. 區

區是由連續的頁組成的空間,無論如何,每個區的大小都是 1MB。為了保證區域內頁面的連續性,InnoDB 存儲引擎一次從磁盤申請 4 - 5 個區域。默認情況下,InnoDB 存儲引擎的頁面大小為 16KB,也就是有有 64 個連續頁面,16*64=1024=1M。

InnoDB1.2.x 版本增加了參數 innodb_page_size,這個參數允許設置默認頁面大小為 4K、8K,

3. 頁

頁是 InnoDB 存儲引擎磁盤管理的最小單位,默認 16kb,可以通過參數 innodb_page_size 設置頁大小為 4K、8K、16K。InnoDB 為了實現不同的目的而設計了很多種頁,InnoDB 存儲引擎中常見的頁面類型有:

數據頁

undo 頁面

系統頁面

事物數據頁面(交易系統頁面)

插入緩沖位圖頁

插入緩沖區空閑列表頁

未壓縮的二進制大對象頁面

壓縮二進制大對象頁面

可以通過以下命令查看大小。

mysql  show status like  innodb_page_size 
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| Innodb_page_size | 16384 |
+------------------+-------+
1 row in set (0.00 sec)
mysql

下面是 InnoDB 數據頁結構,它由七部分組成。

名稱作用 File header 記錄了頁頭的一些信息,cheksum、Ppervious 和 next page 的記錄 Page header 記錄了頁的狀態信息和存儲信息、首個記錄的 positionInfimum+ supremumInnoDB 每個數據頁有兩個虛擬行記錄,用來限定記錄邊界 Row records 實際存儲的行數據信息 Free space 空閑空間,同樣是鏈表結構 Page directory 存放了記錄的相對位置 File trailerinnodb 利用它來保證頁完整地寫入磁盤 4. 行

InnoDB 存儲引擎是面向行的,頁里面又記錄著行記錄的信息,也就是數據是按照行存儲的。行記錄數據又是按照行格式進行存放的。每個頁存放的行記錄也是有硬性定義的,最多允許存放 16KB/2-200 行,也就是 7992 行。

InnoDB 存儲引擎有兩種文件格式,一種叫 Antelops, 另外一種叫 Barracuda。

在 Antelope 文件格式下,有 compact 和 redundant 兩種行記錄格式。

在 Barracuda 文件格式下,有 compressed 和 dynamic 兩種行記錄格式。

可以通過以下方式查看當前格式,其中 Row_format 就是對應行格式存儲類型。

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:

以上是“InnoDB 中邏輯存儲結構的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注丸趣 TV 行業資訊頻道!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-28發表,共計3659字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 青神县| 大竹县| 武夷山市| 东海县| 固原市| 沈丘县| 秦安县| 开江县| 枣阳市| 泽库县| 丹棱县| 永清县| 皋兰县| 南召县| 张家川| 周口市| 铜梁县| 龙泉市| 西林县| 买车| 德安县| 勐海县| 陈巴尔虎旗| 固阳县| 南城县| 南召县| 五指山市| 勐海县| 永兴县| 湘乡市| 潢川县| 友谊县| 赤城县| 陕西省| 张掖市| 余江县| 永寿县| 新余市| 浪卡子县| 平乐县| 克什克腾旗|