日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

【转】2.3【MySQL】运行原理(三)InnoDB 逻辑存储结构

發(fā)布時(shí)間:2023/12/10 数据库 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】2.3【MySQL】运行原理(三)InnoDB 逻辑存储结构 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

MySQL的存儲(chǔ)結(jié)構(gòu)分為5級(jí):表空間、段、簇、頁(yè)、行。

1.表空間 TableSpace

上篇【MySQL】從InnoDB的內(nèi)存結(jié)構(gòu)、磁盤結(jié)構(gòu)到update sql執(zhí)行過(guò)程分析?在磁盤結(jié)構(gòu)部分就說(shuō)過(guò)了,表空間可以看做是InnoDB 存儲(chǔ)引擎邏輯結(jié)構(gòu)的最高層,所有的數(shù)據(jù)都存放在表空間中。分為:系統(tǒng)表空間、獨(dú)占表空間、通用表空間、臨時(shí)表空間、Undo表空間。

2.段 Segment

表空間是由各個(gè)段組成的,常見(jiàn)的段有數(shù)據(jù)段、索引段、回滾段等,段是一個(gè)邏輯的概念。一個(gè)ibd文件(獨(dú)立表空間文件)里面會(huì)由很多個(gè)段組成。

創(chuàng)建一個(gè)索引會(huì)創(chuàng)建兩個(gè)段,一個(gè)是索引段:leaf node segment,一個(gè)是數(shù)據(jù)段:non-leafnodesegment。索引段管理非葉子節(jié)點(diǎn)的數(shù)據(jù)。數(shù)據(jù)段管理葉子節(jié)點(diǎn)的數(shù)據(jù)。也就是說(shuō),一個(gè)表的段數(shù),就是索引的個(gè)數(shù)乘以2。

3.簇 Extent

一個(gè)段(Segment)又由很多的簇(也可以叫區(qū))組成,每個(gè)區(qū)的大小是1MB(64個(gè)連續(xù)的頁(yè))。每一個(gè)段至少會(huì)有一個(gè)簇,一個(gè)段所管理的空間大小是無(wú)限的,可以一直擴(kuò)展下去,但是擴(kuò)展的最小單位就是簇。

4.頁(yè) Page(重點(diǎn))

為了高效管理物理空間,對(duì)簇進(jìn)一步細(xì)分,就得到了頁(yè)。簇是由連續(xù)的頁(yè)(Page)組成的空間,一個(gè)簇中有64個(gè)連續(xù)的頁(yè)。 (1MB/16KB=64)。這些頁(yè)面在物理上和邏輯上都是連續(xù)的。

跟大多數(shù)數(shù)據(jù)庫(kù)一樣,InnoDB也有頁(yè)的概念(也可以稱為塊),每個(gè)頁(yè)默認(rèn)16KB。頁(yè)是InnoDB存儲(chǔ)引擎磁盤管理的最小單位,通過(guò)innodb_page_size設(shè)置。一個(gè)表空間最多擁有2^32個(gè)頁(yè),默認(rèn)情況下一個(gè)頁(yè)的大小為16KB,也就是說(shuō)一個(gè)
表空間最多存儲(chǔ)64TB的數(shù)據(jù)。

注意,文件系統(tǒng)中,也有頁(yè)的概念。操作系統(tǒng)和內(nèi)存打交道,最小的單位是頁(yè)P(yáng)age。文件系統(tǒng)的內(nèi)存頁(yè)通常是4K。

SHOW VARIABLES LIKE 'innodb_page_size';

假設(shè)一行數(shù)據(jù)大小是1K,那么一個(gè)數(shù)據(jù)頁(yè)可以放16行這樣的數(shù)據(jù)。下面的示例就用每頁(yè)放3行數(shù)據(jù):

由于索引屬于二叉查找樹(shù),所以索引字段是有序的。往表中插入數(shù)據(jù)時(shí)

  • 如果一個(gè)頁(yè)面已經(jīng)寫(xiě)完,產(chǎn)生一個(gè)新的葉頁(yè)面(如果一個(gè)簇的所有的頁(yè)面都被用完,會(huì)從當(dāng)前頁(yè)面所在段新分配一個(gè)簇)
  • 如果數(shù)據(jù)不是連續(xù)的,往已經(jīng)寫(xiě)滿的頁(yè)中插入數(shù)據(jù),會(huì)導(dǎo)致葉頁(yè)面分裂

5.行 Row

InnoDB 存儲(chǔ)引擎是面向行的(row-oriented),也就是說(shuō)數(shù)據(jù)的存放按行進(jìn)行存放。

文件格式行格式描述
Antelope(Innodb-base)ROW_FORMAT=COMPACT
ROW_FORMAT=REDUNDANT
Compact 和 redumdant 的區(qū)別在就是在于首部的存 存內(nèi)容區(qū)別。 compact的存儲(chǔ)格式為首部為一個(gè)非NULL的變長(zhǎng)字段長(zhǎng)度列表
redundant 的存儲(chǔ)格式為首部是一個(gè)字段長(zhǎng)度偏移 列表(每個(gè)字段占用的字節(jié)長(zhǎng)度及其相應(yīng)的位移)。
在 Antelope 中對(duì)于變長(zhǎng)字段,低于 768 字節(jié)的,不 會(huì)進(jìn)行 overflowpage 存儲(chǔ),某些情況下會(huì)減少結(jié)果集 IO.
Barracuda(Innodb-plugin)ROW_FORMAT=DYNAMIC
ROW_FORMAT=COMPRESSED
這兩者主要是功能上的區(qū)別功能上的。 另外在行里的變長(zhǎng)字段和 Antelope 的區(qū)別是只存 20 個(gè)字節(jié), 其它的 overflowpage 存儲(chǔ)。
另外這兩都需要開(kāi)啟 innodb_file_per_table=1

innodb_file_format 在配置文件中指定;

show variables like "%innodb_file_format%"; SET GLOBAL innodb_file_format=Barracuda;

row_format則在創(chuàng)建數(shù)據(jù)表時(shí)指定

CREATE TABLE tf1 (c1 INT PRIMARY KEY) ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;

查看行格式(注:需要在命令行操作):

SHOW TABLE STATUS LIKE 'tf1'\G;

總結(jié)

以上是生活随笔為你收集整理的【转】2.3【MySQL】运行原理(三)InnoDB 逻辑存储结构的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。