MySQL引擎之innodb介紹及特點


什么是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
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM