mysql 引擎介绍

一、MyISAM 引擎


1.1 MyISAM引擎的特点

1、不支持事务
2、表级锁定,更新时锁定整个表
3、读写互相阻塞
4、只会缓存索引,通过key_buffer_size 缓存索引
5、读取速度快,占用资源相对少
6、不支持外键约束,但支持全文索引
7、MyISAM 引擎是mysql 5.5 前默认的存储引擎


1.2 MyISAM适合的生产业务场景

1、不需要事务支持的业务;
2、一般为读数据较多的应用;读写都频繁场景不适合,读多或写多都适合
3、并发访问相对较低的业务(纯读纯写高并发也可以)(锁定机制问题)。
4、数据修改相对较少的业务(阻塞问题)
5、以读为主的业务,
6、对数据一致性要求不高的业务
7、硬件资源比较差的机器可以使用MyISAM,所谓
8、中小型网站的部分业务会用。


1.3 MyISAM引擎调优的方式

1、设置合适的索引(缓存机制)
2、调整读写优先级,根据实际需求确保重要操作更优先执行
3、启用延时插入,改善大批写入性能(降低写入频率,竟可能多条数据一次性写入)
4、尽量顺序操作让insert 数据都写入到尾部,减少阻塞
5、分解大的时间长的操作,降低单个操作的阻塞时间
6、降低并发数(减少mysql访问),某些高并发场景进行排队队列机制
7、对于相对静态的数据库数据,充分利用query cache 或memcached 缓存服务可以极大提高访问效率
8、myisam 的count 只有在全表扫描时特别高效,带有其他条件的count 都需要进行实际的数据访问
9、可以把主从同步的主库使用innodb,从库使用myisam 引擎


二、InnoDB


2.1 InnoDB的特点:

1、支持事务
2、行级锁定
3、读写阻塞与事务隔离级别相关
4、具有非常高效的缓存特性
5、整个表和主键以Cluster 方式存储,组成一颗平衡树
6、所有secondary index 都会保存主键信息
7、支持分区,表空间,类似oracle 数据库
8、支持外键约束,支持全文索引
9、和myisam 比,innodb 对硬件资源要求较高


2.2 生产业务场景

1、需要事务支持的业务
2、行级锁对高并发有很好的适应能力,但需要确保查询是通过索引完成
3、数据读写及更新都较为频繁的场景
4、数据一致性要求较高的业务
5、硬件设备内存较大
6、相比myisam引擎,innodb更消耗资源,没有myisam 响应速度快


2.3 InnoDB 调优精要

1、主键尽可能小,避免给Secondary index 带来过大的空间负担
2、避免全表扫描,因为会使用表锁
3、尽可能缓存所有索引和数据,提高响应速度,减少磁盘IO 消耗
4、在大批量小插入的时候,尽量自己控制事物而不要使用autocommit 自动提交,有开关可以控制提交方式
5、合理设置innodb_flush_log_at_trx_commit 参数值,不要过度追求安全性
如果设置为0,log buffer 每秒就会被刷写日志文件到磁盘,提交事物的时候不做任何操作
6、避免主键更新,因为这会带来大量的数据移动


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章