MySQL InnoDB的儲存結構總結
從物理意義上來講,InnoDB表由共享表空間、日誌檔案組(redo檔案組)、表結構定義檔案組成。若將innodb_file_per_table設定為on,則系統將為每一個表單獨的生成一個table_name.ibd的檔案,
在此檔案中,儲存與該表相關的資料、索引、表的內部資料字典資訊。表結構檔案則以.frm結尾,這與儲存引擎無關。
以下為InnoDB的表空間結構圖:
在InnoDB儲存引擎中,預設表空間檔案是ibdata1,初始化為10M,且可以擴充套件,如下圖所示:
實際上,InnoDB的表空間檔案是可以修改的,使用以下語句就可以修改:
Innodb_data_file_path=ibdata1:370M;ibdata2:50M:autoextend
使用共享表空間儲存方式時,Innodb的所有資料儲存在一個單獨的表空間裡面,而這個表空間可以由很多個檔案組成,一個表可以跨多個檔案存在,所以其大小限制不再是檔案大小的限制,
而是其自身的限制。從Innodb的官方文件中可以看到,其表空間的最大限制為64TB,也就是說,Innodb的單表限制基本上也在64TB左右了,當然這個大小是包括這個表的所有索引等其他相關資料。
而在使用單獨表空間儲存方式時,每個表的資料以一個單獨的檔案來存放,這個時候的單表限制,又變成檔案系統的大小限制了。
以下即為不同平臺下,單獨表空間檔案最大限度。
Operating System File-size Limit
Win32 w/ FAT/FAT32 2GB/4GB
Win32 w/ NTFS 2TB (possibly larger)
Linux 2.4+ (using ext3 file system) 4TB
Solaris 9/10 16TB
MacOS X w/ HFS+ 2TB
NetWare w/NSS file system 8TB
※ 以下是MySQL文件中的內容:
Windows使用者請注意: FAT和VFAT (FAT32)不適合MySQL的生產使用。應使用NTFS。
共享表空間與獨佔表空間可以透過引數innodb_file_per_table來轉換,若為1,則開啟獨佔表空間,否則,開啟共享表儲存。
在伺服器資源有限,單表資料不是特別多的情況下, 獨立表空間明顯比共享方式效率更高 . 但是MySQL 預設是共享表空間 。
具體的共享表空間和獨立表空間優缺點如下:
共享表空間:
優點:
可以放表空間分成多個檔案存放到各個磁碟上(表空間檔案大小不受表大小的限制,如一個表可以分佈在不同步的檔案上)。資料和檔案放在一起方便管理。
缺點:
所有的資料和索引存放到一個檔案中以為著將有一個很常大的檔案,雖然可以把一個大檔案分成多個小檔案,但是多個表及索引在表空間中混合儲存,這樣對於一個表做了大量刪除操作後表空間中將會
有大量的空隙,特別是對於統計分析,日值系統這類應用最不適合用共享表空間。
獨立表空間:在配置檔案(my.cnf)中設定: innodb_file_per_table
優點:
1. 每個表都有自已獨立的表空間。
2. 每個表的資料和索引都會存在自已的表空間中。
3. 可以實現單表在不同的資料庫中移動。
4. 空間可以回收(除drop table操作處,表空不能自已回收)
a) Drop table操作自動回收表空間,如果對於統計分析或是日值表,刪除大量資料後可以透過:alter table TableName engine=innodb;回縮不用的空間。
b) 對於使innodb-plugin的Innodb使用truncate table也會使空間收縮。
c) 對於使用獨立表空間的表,不管怎麼刪除,表空間的碎片不會太嚴重的影響效能,而且還有機會處理。
缺點:
單表增加過大,如超過100個G。
※ 對於啟用了innodb_file_per_table 的引數選項之後,在每個表對應的.idb檔案內只是存放了資料、索引和插入緩衝,而撤銷(undo)資訊,系統事務資訊,二次寫緩衝等還是存放在了原來的共享表空間內。
※ 資料段即B+樹的葉節點,索引段即為B+樹的非索引節點。
※ InnoDB儲存引擎的管理是由引擎本身完成的,表空間是由分散的頁和段組成。
※ 區由64個連續的頁組成,每個頁大小為16K,即每個區大小為1MB,建立新表時,先有32頁大小的碎片頁存放資料,使用完後才是區的申請,(InnoDB最多每次申請4個區,保證資料的順序效能)
※ 頁型別有:資料頁、Undo頁、系統頁、事務資料頁、插入緩衝點陣圖頁、以及插入緩衝空閒列表頁。
在此檔案中,儲存與該表相關的資料、索引、表的內部資料字典資訊。表結構檔案則以.frm結尾,這與儲存引擎無關。
以下為InnoDB的表空間結構圖:
在InnoDB儲存引擎中,預設表空間檔案是ibdata1,初始化為10M,且可以擴充套件,如下圖所示:
實際上,InnoDB的表空間檔案是可以修改的,使用以下語句就可以修改:
Innodb_data_file_path=ibdata1:370M;ibdata2:50M:autoextend
使用共享表空間儲存方式時,Innodb的所有資料儲存在一個單獨的表空間裡面,而這個表空間可以由很多個檔案組成,一個表可以跨多個檔案存在,所以其大小限制不再是檔案大小的限制,
而是其自身的限制。從Innodb的官方文件中可以看到,其表空間的最大限制為64TB,也就是說,Innodb的單表限制基本上也在64TB左右了,當然這個大小是包括這個表的所有索引等其他相關資料。
而在使用單獨表空間儲存方式時,每個表的資料以一個單獨的檔案來存放,這個時候的單表限制,又變成檔案系統的大小限制了。
以下即為不同平臺下,單獨表空間檔案最大限度。
Operating System File-size Limit
Win32 w/ FAT/FAT32 2GB/4GB
Win32 w/ NTFS 2TB (possibly larger)
Linux 2.4+ (using ext3 file system) 4TB
Solaris 9/10 16TB
MacOS X w/ HFS+ 2TB
NetWare w/NSS file system 8TB
※ 以下是MySQL文件中的內容:
Windows使用者請注意: FAT和VFAT (FAT32)不適合MySQL的生產使用。應使用NTFS。
共享表空間與獨佔表空間可以透過引數innodb_file_per_table來轉換,若為1,則開啟獨佔表空間,否則,開啟共享表儲存。
在伺服器資源有限,單表資料不是特別多的情況下, 獨立表空間明顯比共享方式效率更高 . 但是MySQL 預設是共享表空間 。
具體的共享表空間和獨立表空間優缺點如下:
共享表空間:
優點:
可以放表空間分成多個檔案存放到各個磁碟上(表空間檔案大小不受表大小的限制,如一個表可以分佈在不同步的檔案上)。資料和檔案放在一起方便管理。
缺點:
所有的資料和索引存放到一個檔案中以為著將有一個很常大的檔案,雖然可以把一個大檔案分成多個小檔案,但是多個表及索引在表空間中混合儲存,這樣對於一個表做了大量刪除操作後表空間中將會
有大量的空隙,特別是對於統計分析,日值系統這類應用最不適合用共享表空間。
獨立表空間:在配置檔案(my.cnf)中設定: innodb_file_per_table
優點:
1. 每個表都有自已獨立的表空間。
2. 每個表的資料和索引都會存在自已的表空間中。
3. 可以實現單表在不同的資料庫中移動。
4. 空間可以回收(除drop table操作處,表空不能自已回收)
a) Drop table操作自動回收表空間,如果對於統計分析或是日值表,刪除大量資料後可以透過:alter table TableName engine=innodb;回縮不用的空間。
b) 對於使innodb-plugin的Innodb使用truncate table也會使空間收縮。
c) 對於使用獨立表空間的表,不管怎麼刪除,表空間的碎片不會太嚴重的影響效能,而且還有機會處理。
缺點:
單表增加過大,如超過100個G。
※ 對於啟用了innodb_file_per_table 的引數選項之後,在每個表對應的.idb檔案內只是存放了資料、索引和插入緩衝,而撤銷(undo)資訊,系統事務資訊,二次寫緩衝等還是存放在了原來的共享表空間內。
※ 資料段即B+樹的葉節點,索引段即為B+樹的非索引節點。
※ InnoDB儲存引擎的管理是由引擎本身完成的,表空間是由分散的頁和段組成。
※ 區由64個連續的頁組成,每個頁大小為16K,即每個區大小為1MB,建立新表時,先有32頁大小的碎片頁存放資料,使用完後才是區的申請,(InnoDB最多每次申請4個區,保證資料的順序效能)
※ 頁型別有:資料頁、Undo頁、系統頁、事務資料頁、插入緩衝點陣圖頁、以及插入緩衝空閒列表頁。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-2120121/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL Innodb 儲存結構 & 儲存Null值 解析MySqlNull
- MySQL的varchar儲存原理:InnoDB記錄儲存結構MySql
- MySQL InnoDB儲存引擎體系結構MySql儲存引擎
- MySQL提升筆記(4)InnoDB儲存結構MySql筆記
- MySQL-07.InnoDB資料儲存結構MySql
- 總結MySQL儲存引擎MyISAM與InnoDB區別MySql儲存引擎
- InnoDB記錄儲存結構
- MySQL 5.6 InnoDB儲存引擎體系結構圖MySql儲存引擎
- MySQL儲存引擎之MyIsam和Innodb總結性梳理MySql儲存引擎
- innodb表空間儲存結構
- MySQL兩種儲存引擎: MyISAM和InnoDB 簡單總結MySql儲存引擎
- 《MySQL 基礎篇》十二:InnoDB 儲存引擎的資料結構MySql儲存引擎資料結構
- mysql儲存引擎InnoDB詳解,從底層看清InnoDB資料結構MySql儲存引擎資料結構
- MySQLInnoDB儲存引擎(一):精談innodb的儲存結構MySql儲存引擎
- Mysql技術內幕InnoDB儲存引擎讀書筆記--《一》Mysql體系結構和儲存引擎MySql儲存引擎筆記
- Mysql-Innodb : 從一個位元組到整個資料庫表瞭解物理儲存結構和邏輯儲存結構MySql資料庫
- 儲存結構
- MySQL體系結構與儲存引擎MySql儲存引擎
- MySql體系結構和儲存引擎MySql儲存引擎
- MySQL InnoDB儲存引擎MySql儲存引擎
- 圖的儲存結構
- MySQL的物理儲存結構和session過程MySqlSession
- 《MySQL 基礎篇》十一:索引的儲存結構MySql索引
- JanusGraph -- 儲存結構
- CentOS 儲存結構CentOS
- MySQL-InnoDB內部結構MySql
- 從一條資料說起——InnoDB儲存資料結構資料結構
- 學習筆記:InnoDB儲存結構及多版本實現筆記
- Redis儲存結構以及儲存格式Redis
- php圖的儲存結構PHP
- 恢復MySQL InnoDB表結構的方法MySql
- 聊聊mysql的樹形結構儲存及查詢MySql
- 【資料結構——圖和圖的儲存結構】資料結構
- MySQL高階10-InnoDB引擎儲存架構MySql架構
- mysql innodb體系結構--初級MySql
- 三種儲存結構
- 【Mysql】InnoDB 引擎中的資料頁結構MySql
- 【PHP資料結構】圖的概念和儲存結構PHP資料結構