MySQL默認(rèn)引擎Innodb
Innodb使用表空間進(jìn)行數(shù)據(jù)存儲
控制參數(shù):innidb_file_per_table
? ? ON:獨立表空間:tablename.ibd
? ? OFF:系統(tǒng)表空間:ibdtaX(X代表數(shù)字)
????show variables like 'innodb_file_per_table';
//默認(rèn)innodb_file_per_table 是on
mysql服務(wù)器數(shù)據(jù)存儲文件目錄:/usr/local/mysql/var
innodb的存儲文件
.frm文件 記錄表結(jié)構(gòu)峻仇,.ibd存儲innodb數(shù)據(jù)。
//將innodb_file_per_table設(shè)置為off #set global?innodb_file_per_table=off;
則只有該表的.frm文件邑商,沒有 .ibd文件摄咆。
系統(tǒng)表空間和獨立表空間如何選擇:
收縮性
? ? 系統(tǒng)表空間無法簡單的收縮文件大小
? ? ? ? 當(dāng)innodb_file_per_table值為off,innodb的表會存在系統(tǒng)表空間當(dāng)中人断。在繁忙的業(yè)務(wù)當(dāng)中吭从,系統(tǒng)表空間會不斷的增長,只要不超過我們磁盤的限制都可以恶迈,但一旦磁盤空間不足影锈,我們不得不刪除系統(tǒng)當(dāng)中無效的數(shù)據(jù),比如不會被長期使用的日志類數(shù)據(jù)蝉绷,我們刪除數(shù)據(jù)后系統(tǒng)表空間并不會縮小鸭廷,另外我們想通過復(fù)制文件的方式給數(shù)據(jù)備份,雖然刪除了文件數(shù)據(jù)熔吗,但表空間的大小并不會改變辆床。解決辦法,把所有innodb中的表導(dǎo)出后桅狠,刪除innodb相關(guān)的表文件后讼载,在重啟mysql,在導(dǎo)入數(shù)據(jù)中跌。使用系統(tǒng)表空間咨堤,無法很容易的收縮系統(tǒng)文件,造成大量的磁盤碎片漩符,降低系統(tǒng)性能一喘。
? ? 獨立表空間可以通過optimize table 命令收縮系統(tǒng)文件
????????當(dāng)對某一個大表清理時,可只對這個表進(jìn)行optimize table重建,不需要重啟數(shù)據(jù)庫凸克,同時也不會影響這個表的訪問议蟆。
IO
系統(tǒng)表空間會產(chǎn)生IO瓶頸
? ? 由于只有一個文件,那么對多個表進(jìn)行同時數(shù)據(jù)刷新時萎战,在文件系統(tǒng)實現(xiàn)時是順序進(jìn)行的咐容。會產(chǎn)生一定的IO瓶頸。
獨立表空間可以同時向多個文件刷新數(shù)據(jù)
? ? 對于獨立表空間蚂维,每一個表都有自己的獨立文件戳粒,則數(shù)據(jù)刷新時,可以多個文件寫入虫啥。
表轉(zhuǎn)移步驟
把系統(tǒng)表空間的表轉(zhuǎn)移到獨立表空間
1蔚约、使用mysqldump導(dǎo)出所有數(shù)據(jù),
2孝鹊、停止mysql服務(wù)器,修改參數(shù)展蒂,并刪除Innodb相關(guān)文件
3又活、重啟MySQL服務(wù),重建Innodb系統(tǒng)表空間
4锰悼、重新導(dǎo)入數(shù)據(jù)
Innodb 存儲引擎的特性?
? ? 1柳骄、事務(wù)性存儲引擎
? ????????? 完全支持事務(wù)的ACID特性(原子性、一致性箕般、隔離性耐薯、持久性)
? ? ? ? ? ? Redo Log(重做日志) 和 Undo Log(回滾日志)
????????????Redo Log實現(xiàn)持久性,有兩部分一個是內(nèi)存中的重做日志緩沖區(qū) ? ? 丝里,由innodb_log_buffer_size 決定大小曲初,另一個是重做日志文件innodb_log_files_in_group文件。
? ? 2杯聚、行級鎖
????????????作用管理共享資源的并發(fā)訪問
????????????鎖實現(xiàn)事務(wù)的隔離性 ? ?
? ? ? ? ? ? 鎖的類型(共享鎖(讀鎖)臼婆、獨占鎖(寫鎖))
????????????鎖的粒度(表級鎖、行級鎖)
? ? ? ? ? ? 表級鎖語句: lock table 表名 write幌绍;解鎖語句:unlock table颁褂;
? ? ? ? ????阻塞和死鎖
? ? ? ? ? ? ? ? ? ? 阻塞:不同鎖之間兼容性間的關(guān)系,在一些事務(wù)中的鎖需要等待了一個事務(wù)中的鎖釋放資源傀广,形成阻塞颁独。
? ? ? ? ? ? ? ? ? ? 死鎖:兩個或兩個以上的事務(wù)在執(zhí)行過程中相互占用了對方等待的資源而產(chǎn)生的異常∥北可以由系統(tǒng)自動處理誓酒,系統(tǒng)選擇資源占有最小的事務(wù)回滾,其他事務(wù)可繼續(xù)贮聂。
3丰捷、Innodb狀態(tài)檢查
? ? show engine innodb status
使用場景:
v5.6前 除空間應(yīng)用和全文索引應(yīng)用都可以Innodb坯墨,該兩者只有MyIsam支持。
v5.7以后Innodb可支持空間應(yīng)用和全文索引應(yīng)用