什么是InnoDB引擎?
InnoDB引擎的優點是支持兼容ACID的事務,以及參數完整性(即對外鍵的支持)。
Oracle公司2005年10月收購了Innovase;Innobase采用雙認證授權。它使用GNU發行,也允許其他想將InnoDB結合到商業軟件的團體好的授權
mysql5.5.5之后數據庫的默認存儲引擎為InnoDB
mysql> show create table test\G
*************************** 1. row ***************************
Table: test
Create Table: CREATE TABLE `test` (
`id` int(4) NOT NULL AUTO_INCREMENT,
`name` char(20) NOT NULL,
`age` int(4) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `index_name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
[root@XM ~]# ll /data/3307/ibdata1 ##存放InnoDB數據的文件
-rw-rw---- 1 mysql mysql 79691776 Mar 25 04:52 /data/3307/ibdata1
InnoDB引擎特點
1.支持事務,支持4個事務隔離級別,支持多版本讀。
2.行級鎖定(更新時一般是鎖定當前行),通過索引實現,全表掃描仍然會是表鎖,注意間隙鎖的影響。
3.讀寫阻塞與事務隔離級別相關。
4.具有非常高效的緩存特性:能緩存索引,也能緩存數據。
5.整個表和主鍵以Cluster方式存儲,組成一個平衡樹。
6.所有Secondary Index都會保存主鍵信息。
7.支持分區,表空間,類似oracle數據庫。
8.支持外鍵約束,5.5之前不支持全文索引,5.5之后支持外鍵索引。
小結:supports transactions,row-level locking。and foreign keys
9.和Myisam引擎比,Innodb對硬件資源要求比較高。
MySQL引擎之innodb引擎應用場景及調優
Innodb引擎適用的生產場景
1、需要事務支持的業務(具有較好的事務特性)
2、行級鎖定對高並發有很好的適應能力,但需要確保查詢時通過索引完成。
3、數據讀寫及更新都較為頻繁的場景,如:bbs,sns,微博,微信等。
4、數據一致性要求較高的業務,例如:充值轉賬,銀行卡轉賬。
5、硬件設備內存較大,可以利用Innodb較好的緩存能力來提高內存利用率,盡可能減少磁盤IO。
innodb_buffer_pool_size = 2048M
innodb_buffer_pool_size = 64M #InnoDB使用一個緩沖池來保存索引和原始數據,設置越大,在存取表里面數據時所需要的磁盤I/O越少。強烈建議不要武斷地將InnoDB的Buffer Pool值配置為物理內存的50%~80%,應根據具體環境而定。
16G內存多實例差不多給2G
Innodb 引擎調優
1、主鍵盡可能小,避免給Secondary index 帶來過大的空間負擔。
2、建立有效索引避免全表掃描,因為會使用表鎖。
3、盡可能緩存所有的索引和數據,提高響應速度,減少產品IO消耗。
4、在大批量小插入的時候,盡量自己控制事務而不要使用autocommit自動提交。有開關可以控制提交方式
5、合理設置innodb_flush_log_at_trx_commit參數值,不要過度追求安全性。
如果innodb_flush_log_at_trx_commit的值為0,log buffer每秒就會被刷寫日志文件到磁盤,提交事務的時候不做任何操作。
6、避免主鍵更新,因為這會帶來大量的數據移動。
MySQL多個引擎對比及數據庫引擎支持知識
mysql> show engines\G ##mysql支持的引擎
*************************** 1. row ***************************
Engine: MRG_MYISAM
Support: YES
Comment: Collection of identical MyISAM tables
Transactions: NO
XA: NO
Savepoints: NO
*************************** 2. row ***************************
Engine: CSV
Support: YES
Comment: CSV storage engine
Transactions: NO
XA: NO
Savepoints: NO
*************************** 3. row ***************************
Engine: MyISAM
Support: YES
Comment: MyISAM storage engine
Transactions: NO
XA: NO
Savepoints: NO
*************************** 4. row ***************************
Engine: BLACKHOLE
Support: YES
Comment: /dev/null storage engine (anything you write to it disappears)
Transactions: NO
XA: NO
Savepoints: NO
*************************** 5. row ***************************
Engine: MEMORY
Support: YES
Comment: Hash based, stored in memory, useful for temporary tables
Transactions: NO
XA: NO
Savepoints: NO
*************************** 6. row ***************************
Engine: PERFORMANCE_SCHEMA
Support: YES
Comment: Performance Schema
Transactions: NO
XA: NO
Savepoints: NO
*************************** 7. row ***************************
Engine: ARCHIVE
Support: YES
Comment: Archive storage engine
Transactions: NO
XA: NO
Savepoints: NO
*************************** 8. row ***************************
Engine: InnoDB
Support: DEFAULT
Comment: Supports transactions, row-level locking, and foreign keys
Transactions: YES
XA: YES
Savepoints: YES
*************************** 9. row ***************************
Engine: FEDERATED
Support: NO
Comment: Federated MySQL storage engine
Transactions: NULL
XA: NULL
Savepoints: NULL
9 rows in set (0.00 sec)
修改引擎推薦使用sed對備份內容進行引擎轉換的方式,不要忘記修改my.cnf使之支持並能高效的使用對應的引擎
創建后引擎的更改,5.0以上
alter table oldboy ENGINE = INNODB;
alter table oldboy ENGINE = MyISAM;
更改引擎實例
alter table student ENGINE = MyISAM;
查看修改后的結果:
show create table student\G
