InnoDB as Default Storage Engine
從mysql-5.5.5開始,InnoDB作為預設儲存引擎,InnoDB作為支援事務的儲存引擎,擁有相關的RDBMS特性:包括ACID事務支援,參考完整性(外健),災難恢復能力等特性。
同時作為維護mysql內部結構的mysql和information_schema兩個databases中的表,依然使用MyISAM儲存引擎,而且不能被更改為InnoDB.
1.InnoDB table優點
硬體故障導致的server crash(比如停電),在下次重起database會自動恢復。
由InnoDB buffer pool 負責cache被訪問的表和索引資料,直接在記憶體中進行處理,根據合理演算法來保持熱點塊(hot)保留在記憶體中,極大地提高訪問效率,減少I/O。
使用外健來實現參考完整性,實現資料的邏輯分割,同時還可以實現關聯更新。
如果資料損壞,checksum機制能夠在你使用時候提醒你這些受損的資料。
建議所有的表都有主健(頻繁使用的field上或者auto_increment field上建立),這將極大提高基於where條件為主健(primary key)上的查詢效能,包括order by , group by 等。
提供change buffering自動優化機制來優化諸如Insert,Update,Delete等操作;InnoDb能允許同一表上的讀,寫操作,還能cache 改變資料來減少I/O.
2.InnoDB table最佳處理方法
給每個InnoDB表指定主健
為提高組合查詢效能,定義外健在join columns上,並且定義為相同資料型別,外健能實現因主表更新而關聯更新子表,並且阻止子表的插入新資料,當這些新資料並不在主表存在時。
改變autocommit預設方式為不自動提交,減少提交次數過多帶來的效能影響;可以由start transaction and commit來以”邏輯事務處理”等為單位來控制提交次數。
停止使用lock table語句,InnoDB能處理同一表上的讀寫併發sessions,並且不存在可靠性和效能損失。
Enable innodb_file_per_table開關,分開表空間存放資料,避免巨型系統表空間出現;同時為諸如壓縮和fast truncate 等操作提供基礎。
根據應用實際情況,進行表壓縮,這不會影響該表的讀寫能力。
如果建表時指定engine= 子句存在問題,使用-sql_mode=no_engine_substitution來阻止表以其它儲存引擎建立。
3.InnoDB相對與InnoDB Plugin時期的改變
可以壓縮表和與之關聯的索引
建立和刪除索引比擁有以前更少的效能影響
Truncate表非常快,並且釋放空間給作業系統使用;而針對系統表空間的truncate之後只能由innodb來使用。
儲存BLOGs 和Long Text fields更有效率
增件新的針對storage engine內部工作的的系統表在information_schema 下
在performance_schema(新增的 db) 增加效能統計資訊表
表有了更大的效能提升
4.效能提升
Crash recovery中,自動恢復到資料庫一直狀態,這過程快速而且值得信任。而且資料越大效果越明顯。這相比過去來說由非常明顯的提升。
大部分新的特性都是自動實現,並不需要額外的配置。詳細的配置參考文件。
5.驗證InnoDB在系統的狀態
使用命令 SHOW VARIABLES LIKE `have_innodb`; 如果是NO,表示沒有支援InnoDB,如果是DISABLED,則看是否配置中有skip-innodb選項,需要去掉。如果支援如下
mysql> show variables like `have_i%`;
+—————+——-+
| Variable_name | Value |
+—————+——-+
| have_innodb | YES |
+—————+——-+
1 row in set (0.00 sec)
使用命令SHOW ENGINES;能看到不同儲存引擎,如果DEFAULT在innodb,代表支援並且為預設儲存引擎。