1.什么是InnoDB引擎?
InnoDB引擎是MySQL數據庫的另一個重要的存儲引擎,正成為目前MySQL AB所發行的新版的標准,被包含在所有二進制安裝包里,和其他存儲引擎相比,InnoDB引擎的優點是支持兼容ACID的事務(類似於PostgreSQL),以及參數完整性(有外鍵)等.現在Innobase實行雙認證授權.MySQL5.5.5以后默認的存儲引擎都是InnoDB引擎.
2.InnoDB的引擎特點.
1).支持事務(事務是指邏輯上的一組操作,組成這組操作的各個單元,要么全成功,要么全失敗)
2).行級鎖定(更新時一般是鎖定當前行):通過索引實現,全表掃描仍然會是鎖定整個表,注意間隙鎖的影響.
3).讀寫阻塞與事務隔離級別相關.
4).具有非常高效的緩存特性,能緩存索引,也能緩存數據.
5).整個表和主鍵以Cluster方式存儲,組成一顆平衡樹.
6).所有Secondary Index 都會保存主鍵信息.
7).支持分區,表空間.類似於Oracle數據庫.
8).支持外鍵約束,不支持全文索引,5.5之前支持,后面不再支持.
9).和MyISAM相比,InnoDB對於硬件資源要求比較高.
3.InnoDB引擎的適用的生產場景
1).需要支持事務的業務(例如轉賬,付款)
2).行級鎖定對於高並發有很好的適應能力,但是需要保證查詢是通過索引完成.
3).數據讀寫及更新都比較頻繁的場景,如:BBS,SNS,微博,微信等.
4).數據一致性要求很高的業務.如:轉賬,充值等.
5).硬件設備內存較大,可以很好利用InnoDB較好的緩存能力來提高內存利用率,盡可能減少磁盤IO的開銷.
4.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).避免主鍵更新,因為這會帶來大量的數據移動.