🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ### **MyISAM** MyISAM存储引擎的特点是:表级锁、不支持事务和全文索引,适合一些CMS内容管理系统作为后台数据库使用,但是使用大并发、重负荷生产系统上,表锁结构的特性就显得力不从心 ### **InnoDB** InnoDB存储引擎的特点是:行级锁、事务安全(ACID兼容)、支持外键、不支持FULLTEXT类型的索引(5.6.4以后版本开始支持FULLTEXT类型的索引)。InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全存储引擎。InnoDB是为处理巨大量时拥有最大性能而设计的。它的CPU效率可能是任何其他基于磁盘的关系数据库引擎所不能匹敌的。 #### InnoDB存储引擎优化 ``` innodb_support_xa = 1 innodb_safe_binlog innodb_buffer_pool_size = 1G innodb_buffer_pool_instances = 1 innodb_log_file_size = 512M innodb_log_buffer_size = 16 innodb_flush_log_at_trx_commit = 2 ``` 参数解释: **innodb_flush_log_at_trx_commit**属性主要控制了innodb将log buffer中的数据写入日志文件,并且刷新磁盘的时间点,取值有0、1(mysql默认值)、2。 ``` 0:事务提交时,不做日志写入操作,而是每秒钟将log buffer中的日志写入文件并且flush磁盘一次。 1:每秒钟或者事务提交时,都会引起日志写入和flush磁盘操作,这样设计也是最安全的。 2:每次事务提交时,进行日志写入,但此时没有flush磁盘操作,而是在每秒钟时进行flush磁盘操作。 ``` #### **InnoDB事务提交后在底层都干了什么** 1, InnoDB提交事务过程如下: ``` 1.1):  把事务写入日志缓冲(log buffer),日志缓冲把事务刷新到事务日志. 1.2):  把事务写入缓冲池(Buffer pool). ``` 2,  Innodb存储引擎在事务提交后,是把随机IO转化为顺序IO来达到快速提交事务的目的. 3,  每次刷新脏页到磁盘,实际上是2次写页到磁盘.  ``` 3.1):  刷新脏页到双写缓冲,顺序IO 3.2):  调用一次fsync()刷新到磁盘,随机IO ``` 4,  宕机或者意外崩溃重启mysql时,根据事务日志来重做日志恢复缓冲池未来得及刷新到磁盘的脏页,保证数据完整性.