InnoDB存儲(chǔ)引擎中的表空間詳解
一、InnoDB體系結(jié)構(gòu):
二、表空間文件:
- system tablespace(系統(tǒng)表空間)(ibdata1...ibdataN文件)
- file-per-table tablespace(單表表空間)(.ibd表空間文件)
- general tablespace(通用表空間): (5.7版本引入在滿足一定約束條件下,可以將多個(gè)表創(chuàng)建到同一個(gè)文件中)
- temporary tablespace: 臨時(shí)表空間文件用于存儲(chǔ)所有非壓縮的臨時(shí)表,第1~32個(gè)臨時(shí)表專用的回滾段也存放在該文件中(itbmp1)。
- undo tablespaces: 由innodb_undo_tablespaces配置。默認(rèn)情況下,該值為0,即undo數(shù)據(jù)是存儲(chǔ)在ibdata中。
- redo log: 在所有數(shù)據(jù)變更前,先寫redo日志(ib_logfile0,ib_logfile1)。
只有system tablespace和temporary tablespace是共享的,其它是非共享的tablespace。
表空間內(nèi)部,所有頁(yè)按照區(qū)(extent)為物理單元進(jìn)行劃分和管理。extent由64個(gè)物理連續(xù)的頁(yè)組成,表空間可以理解為由一個(gè)個(gè)物理相鄰的extent組成。
2.1 Table Space ID 分布
- 0x0 : SYSTEM_TABLE_SPACE
- 0x1 ~ 0xFFF9E108: USER SPACE 0xFFF9E
- 108 ~ 0xFFFFFB88: session temp table
- 0xFFFFFF70 ~ 0xFFFFFFEF: undo tablespace ID
- 0xFFFFFFF0: redo log pseudo-tablespace
- 0xFFFFFFF1: checkpoint file space
- 0xFFFFFFFD: innodb_temporary tablespace
- 0xFFFFFFFE: data dictionary tablespace
- 0xFFFFFFFF : invalid space
系統(tǒng)表空間ibdata雖然包括不同文件ibdata1, ibdata2…,但這些文件邏輯上是相連的,這些文件同屬于space_id為0的表空間。用戶創(chuàng)建表產(chǎn)生的ibd文件,則認(rèn)為是一個(gè)獨(dú)立的tablespace,只包含一個(gè)文件。
2.2 tablespace相關(guān)設(shè)置
#1.DATA STORAGE datadir=/var/lib/mysql #2.InnoDB Configuration innodb_file_per_table=1 #3.InnoDB Memory innodb_buffer_pool_size = 2000M #4.System Tablespace configuration innodb_data_file_path= ibdata1:512M;ibdata2:512M:autoextend #5.Redo log and buffer configuration innodb-log-files-in-group=3 innodb_log_file_size=100M innodb_log_buffer_size=30M #5.InnoDB file formate innodb_file_format = Barracuda #6.UNDO Tablespace Configuration innodb_undo_directory = /var/lib/mysql/ innodb_undo_tablespaces = 3 innodb_undo_logs = 128 innodb_undo_log_truncate = ON innodb_rollback_segments = 128 #7.Temp Tablespace Configuration tmpdir = /var/lib/mysql/ innodb_temp_data_file_path = ibtmp1:20M:autoextend #8.tablespace 數(shù)據(jù)加密插件,在Enterprise版本中提供 #Keyring configuration early-plugin-load=keyring_file.so keyring_file_data=/var/lib/mysql-keyring/keyring
2.3 The System Tablespace(系統(tǒng)表空間)
- 數(shù)據(jù)字典: 各表的元數(shù)據(jù)(表結(jié)構(gòu),索引,列信息等)
- 變更緩沖區(qū):(IBUF bitmap)
- 雙寫緩沖區(qū):(double write)
- 撤銷日志undo:(如果自定義了UNDO表空間,在系統(tǒng)表空間的UNDO log也就會(huì)失效)
- 表數(shù)據(jù)(索引數(shù)據(jù)),(末開始獨(dú)享表空間或指定保存到系統(tǒng)表空間)
- 一個(gè)或多個(gè)文件ibdataN:文件的大小和數(shù)量配置控制:innodb_data_file_path=ibdata1:500M:ibdata2:12M:autoextend:max:500M
# innochecksum --page-type-summary ibdata1 File::ibdata1 ================PAGE TYPE SUMMARY============== #PAGE_COUNT PAGE_TYPE =============================================== 349391 Index page 5.25% 6076813 Undo log page 91.29% 18349 Inode page 0.28% 174659 Insert buffer free list page 2.62% 36639 Freshly allocated page 0.55% 405 Insert buffer bitmap 0.01% 98 System page 1 Transaction system page 1 File Space Header 404 Extent descriptor page 0.01% 0 BLOB page 8 Compressed BLOB page 0 Other type of page ------------------------------------------------------- 6656768 Pages total 100.00% =============================================== Additional information: Undo page type: 3428 insert, 6073385 update, 0 other Undo page state: 1 active, 67 cached, 249 to_free, 1581634 to_purge, 0 prepared, 4494862 other
2.4 File-Per-Table Tablespaces(單表表空間 )
- 每個(gè)表都存儲(chǔ)在自己的表空間數(shù)據(jù)文件(.ibd文件)中。(由innodb_file_per_table配置選項(xiàng)控制,默認(rèn)情況下該選項(xiàng)是開啟的)。
- 用戶創(chuàng)建表產(chǎn)生的ibd文件,則認(rèn)為是一個(gè)獨(dú)立的tablespace,只包含一個(gè)文件。
- 除了數(shù)據(jù)頁(yè)、索引頁(yè)外,文件中還包含了多種管理頁(yè)。
2.5 Undo tablespace
UNDO表空間用于存放一個(gè)或多個(gè)UNDO log文件。UNDO通過保留活動(dòng)事務(wù)(MVCC)的已修改未提交數(shù)據(jù)來(lái)保證讀一致性。 從此存儲(chǔ)區(qū)域檢索未修改的數(shù)據(jù)。UNDO log也稱為回滾段。默認(rèn)情況下,UNDO表空間是系統(tǒng)表空間的一部分,當(dāng)然從MySQL5.6開始也允許用戶自定義一個(gè)UNDO表空間,需要注意的是:
- 如果自定義了UNDO表空間,在系統(tǒng)表空間的UNDO log也就會(huì)失效
- 這一配置需要在MySQL初始化之前完成
- 可以truncate但不能drop,如果要使用truncate的話則UNDO表空間必須已經(jīng)獨(dú)立于系統(tǒng)表空間
- 默認(rèn)大小10M
- 相關(guān)參數(shù)
innodb_undo_tablespace : Number of undo tablespaces, default 0 , max 95 innodb_undo_directory : Location for undo tablespace,default is data_dir with 10MB initial size. innodb_undo_logs : Number of undo logs in a single undo tablespace, default and max value is ‘128' [ Deprecated in 5.7.19 , innodb_rollback_segments variable will control this] innodb_undo_log_truncate: truncate undo tablespace, Default OFF
2.6 Temporary tablespace
保存和檢索臨時(shí)表已修改未提交的數(shù)據(jù)和相關(guān)的對(duì)象,始于MySQL5.7.2,server運(yùn)行時(shí)用于回滾臨時(shí)表的修改。
- 臨時(shí)表的UNDO log存在于臨時(shí)表空間
- server啟動(dòng)時(shí),默認(rèn)的臨時(shí)表空間文件ibtmp1會(huì)被重新創(chuàng)建
- 優(yōu)點(diǎn):臨時(shí)表的REDO log I/O被消除,性能得以提升
- 相關(guān)參數(shù) innodb_temp_data_file_path = ibtmp1:12M:autoextend (default)
2.7 General tablespace
用戶定義表空間,用戶可以用CREATE TABLESPACE的語(yǔ)法來(lái)創(chuàng)建自定義的表空間,并在創(chuàng)建表的時(shí)候指定該表所屬的表空間。優(yōu)點(diǎn):
- 比innodb_file_per_table更有存儲(chǔ)上(Memory)的優(yōu)勢(shì)
- 支持Antelope和Barracuda文件格式
- 支持所有行格式以及相關(guān)特性
- 支持在非數(shù)據(jù)目錄的目錄下創(chuàng)建
- NOTE: tablespace名是大小寫敏感的
到此這篇關(guān)于InnoDB存儲(chǔ)引擎中的表空間詳解的文章就介紹到這了,更多相關(guān)InnoDB表空間內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
centos 7系統(tǒng)下編譯安裝 mysql5.7教程
因?yàn)镸ysql5.7的更新特性還是非常多,所以這篇文章就給大家介紹以下在centos上面編譯安裝mysql5.7的教程。本文給大家介紹的步驟還是相對(duì)來(lái)說比較詳細(xì)的,相信對(duì)大家具有一定的參考借鑒價(jià)值,有需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。2016-11-11mysql實(shí)現(xiàn)數(shù)據(jù)文件存儲(chǔ)到指定分區(qū)的示例代碼
MySQL中可以使用分區(qū)表來(lái)提高數(shù)據(jù)檢索速度,本文主要介紹了mysql實(shí)現(xiàn)數(shù)據(jù)文件存儲(chǔ)到指定分區(qū)的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01MySQL?字符串轉(zhuǎn)換為數(shù)字的方法小結(jié)
這篇文章主要介紹了MySQL字符串轉(zhuǎn)換為數(shù)字的幾種方法,本文給大家列列舉了三種方法,每種方法通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-01-01win8.1安裝mysql5.6時(shí)遇到問題解決方案
本文主要記錄的是作者在win8.1安裝mysql5.6時(shí)遇到問題的解決方案,網(wǎng)上查了很多方法都沒能解決,這里把最后的方法分享給大家2016-10-10MySQL8.0無(wú)法遠(yuǎn)程連接訪問的解決方法
本文主要介紹了MySQL8.0無(wú)法遠(yuǎn)程連接訪問的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01MySQL安裝與配置:如何重置MySQL登錄密碼(windows環(huán)境)
這篇文章主要介紹了MySQL安裝與配置:如何重置MySQL登錄密碼(windows環(huán)境),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12Mysql的max_allowed_packet設(shè)定
今天小編就為大家分享一篇關(guān)于Mysql的max_allowed_packet設(shè)定,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-12-12