Innodb邏輯存儲單元爲爲表空間,段,區,頁 mysql
InnoDB存儲引擎表中全部數據都是存儲在表空間中的,表空間分爲系統表空間,自定義表空間,系統表空間以ibdatal來命名,存儲全部數據信息和回滾段(undo)的信息(mysql 5.6以後能夠設置undo存儲位置),初始化大小10MB,==Innodb_data_file_path==負責定義系統表空間的路徑,初始化大小,自動擴展策略,默認的擴展大小是64MB,建議將系統表空間大小調整爲1G,由於在遇到高併發事務時,數據信息/undo會比較大,會對性能有不小的影響sql
目前mysql中默認使用的都是獨立的表空間,獨立表空間中存儲對應表的B+樹數據,索引數據,插入緩存,其他信息都存儲在默認表空間緩存
獨立表空間每張表都有本身的表空間,表空間轉移、回收表空間比較方便,不過每一個表空間都有.frm和.ibd文件兩個文件描述符,增加過塊會有性能問題併發
系統表空間也能夠理解爲共享表空間,共享表空間沒法在線回收空間,需將所有Innodb表中數據備份,刪除原表,而後再把數據導回到與原表結構同樣的新表高併發
mysql5.7以後新增臨時表空間和通用表空間性能
1.臨時表空間就是將臨時表的戶數從系統表中抽離出來,造成本身獨立表空間,參數inndodb_tmp_data_file_path,不過不能定義臨時表文件的存放路徑,文件名爲ibtmpl,默認大小12M 2. 通用表空間就是多個表放在同一表空間中,按照活躍度來劃分表,存放在不一樣的磁盤,目前生產中不多用
表空間是由段組成的,一般有索引段,數據段,回滾段,==每一個段都是有N個區和32零散頁組成==,段空間擴展是以區爲單位進行擴展,一般建立一個索引會建立2個段,分別爲非葉子節點段,葉子結點段。一張表一般有4個段大數據
區是連續的頁組成,物理上連續分配的一段空間,==大小固定是10M,通常一個區是由64頁組成==3d
最小的物流存儲單位爲頁,默認大小是16Kb,1個區大小16*64=1M,mysql5.6能夠自定義page大小,從16kb調整爲32kb,64kb指針
頁裏面記錄行信息,InnoDB存儲引擎有兩種文件格式:Antelope和Barracuda,Antelope記錄格式有compact和redundant,Barracuda記錄格式有compressed和dynamic,mysql5.7默認是dynamic記錄格式和barracuda文件格式.code
不一樣的記錄格式區別在於對於行溢出的不一樣處理方案(行溢出簡單來講數據在當前存儲頁面外,拆分多個頁面進行存儲),針對於大數據類型text,dynamic將採用的數據存放在溢出的頁中,數據頁中只存儲前20個字節指針,在comapct模式下溢出的頁只能存放768個字節