InnoDB的表空間分為共享表空間和獨(dú)立表空間,對于前者來說,數(shù)據(jù)存放在名為“ibdata1”的文件中。對于后者來說,各數(shù)據(jù)表的數(shù)據(jù)分散存儲后綴為“.idb”的不同文件中。在表空間文件中包含一行行的記錄,記錄是表空間的最小組成元素,這些記錄保存在頁(Page)當(dāng)中。頁包括Page header、一行行的記錄、Page trailer等部分組成。InnoDB引擎在運(yùn)作過程中,相應(yīng)的表空間和InnoDB Buffer Pool是緊密相關(guān)的,硬盤中的表空間文件和內(nèi)存中的緩存結(jié)構(gòu)是很相似的,即均以頁為單位來保存數(shù)據(jù)。頁容量通常為16KB,在一頁中會存儲多行記錄。64個頁可以組成一個Extent,最多四個 Extent可以組成一個段(Segment)。
例如,對于InnoDB引擎的索引文件來說,一般由前置索引和后置索引組成,前者和后者都會消耗一個Extent。在初始階段,在段中可能會分配一些頁,之后會逐漸擴(kuò)張到一個Extent。隨后會逐步添加多個Extent。表空間文件由多個段組成,在其中包括前置索引、后置索引、RollBack信息等,因此,從組成結(jié)構(gòu)上說,表空間文件實際上由眾多的頁組成的。針對表空間文件的操作,本質(zhì)上是對頁進(jìn)行操作,例如,將多個頁讀取到緩存中,將頁中緩存中寫回表空間文件等。在MySQL數(shù)據(jù)庫運(yùn)轉(zhuǎn)過程中,頁的讀寫操作在頻繁地進(jìn)行。所以,表空間文件的損壞,也經(jīng)常發(fā)生在此環(huán)節(jié)中。