1.3 MyIASM引擎适用的生产业务场景
1)不需要事务支持的业务(例如转账就不行)
2)一般为读数据比较多的应用,读写都频繁场景不适合,读多或者写多的都适合。
3)读写并发访问相对较低的业务(纯读纯写高并发也可以)(锁定机制问题)
4)数据修改相对较少的业务(阻塞问题)
5)以读为主的业务,例如:数据库系统表、www、blog图片信息数据库,用户数据库。商品库等业务
6)对硬件一致性要求不是非常高的业务(不支持事务)
7)硬件资源比较差的机器可以用MySAM(占用资源少)
8)使用读写分离的MySQL从库可以使用MyIASM
小结:单一对数据库的操作都可以使用MyIASM,所以单一就是尽量纯读,或纯写(insert,update,delete)等
1.4 MyIASM引擎调优精要
1.设置合适的索引(缓存机制)
2.调整读写优先级,根据实际需求确保重要操作更优先执行。
3.启用延迟插入改善大批量写入性能(降低写入频率,尽可能多条数据一次性写入)
4.尽量顺序操作让insert数据都写入到尾部,减少阻塞
5.分解大的时间长的SQL操作,降低单个操作的阻塞时间。
6.降低并发数(减少对MySQL访问),某些高并发场景通过应用进行排队队列机制
7.对于相对静态(更改不频繁)的数据库数据,充分利用Query Cache或memcached缓存服务可以极大的提高访问效率,网站动态内容静态化,减少对数据库的访问。
InnoDB引擎
1.1 什么是InnoDB引擎?
InnoDB引擎是MySQL数据库的另一个重要的存储引擎,整成为目前MySQL AB所发行新版的标准,被包含在所有二进制安装包里。和其他的存储引擎相比,InnoDB引擎的优点是支持兼容ACID的事务(类似于PostgerSQL)以及参数完整性(即对外键的支持)
Oracle公司2005年10月收购了Innobase。Innobase采用双认证授权,它使用GUN发行,也允许其他想将InnoDB结合到商业软件的团体获得授权。
MySQL5.5.5以后数据库的默认存储引擎为InnoDB
InnoDB引擎特点
1.支持事务:支持4个事务隔离级别,支持多版本读。
2.行级锁定(更新时一定是锁定当前行):通过索引实现,全表扫描仍然会是表锁,注意间隙锁的影响。
3.读写阻塞与事务隔离级别相关。
4.具有非常搞笑的缓存特性:能缓存索引,也能缓存数据。
5.整个表和主键以Cluster方式存储,组成一颗平衡树。
6.所有Secondary Index都会保存主键信息
7.支持分区,表空间,类似oracle数据库
8.支持外键约束 5.5 以后不支持全文索引,以后支持了。
9.和MyIASM引擎相比,InnoDB对硬件资源要求比较高。
InnoDB特点:面试必答题
1.Row-level locking #行级锁
2.Full-text search indexs #全文索引
3.Data caches #缓存数据
4.Index caches #索引缓存
5.Transactions #支持事务
6.占用资源多
7.读写阻塞与事务隔离级别相关。
8.外键
InnoDB引擎使用的生产业务场景
1、需要事务支持的业务(具有较好的事务特性)
2、行级锁定对高并发有很好的适应能力,但需要确保查询是通过索引完成
3、数据读写及更新都较为频繁的场景,如:BBS。SNA。微博,微信等。
4、数据一致性要求较高的业务,例如:充值转账、银行卡转账。
5、硬件设备内存较大,可以利用InnoDB较好的缓存能力来提高内存利用率,尽可能减少磁盘IO
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、避免主键更新,因为这会带来大量的数据移动