高性能Mysql(第一章)
2017-05-16 本文已影响25人
Captain_tu
- 事务的特性
- 原子性 a
- 一致性 c
- 隔离性 i
- 持久性 d
- 隔离级别
- read uncommited 未提交读-脏读-少用
- read commited 提交读-其他sql默认-不可重复读-两次执行查询的结果可能不同
- repeatable read 可重复读-mysql默认-幻读(MVCC解决)-多次读取结果相同
- serializable 可串行化-最高的隔离级别-避免幻读-加行锁-造成争锁问题-少用
-
死锁
image.png
mysql解决:将持有最少行级排它锁的事务进行回滚
- 多版本并发控制(MVCC)
-
存储引擎的选择:
除非需要用到innodb不支持的特性,并且没有其他办法可以代替,否则都使用innodb。- 如果需要全文索引,则优先考虑innodb+sphinx的组合,而不是使用支持全文索引的myisam。
- 如果不在乎扩展能力,并发,也不在乎崩溃后的数据丢失问题,却对innodb的空间占用比较敏感,这种场景下使用myisam比较合适。
- 除非万不得已,否则不建议使用混合存储引擎,可能有一些问题,比如事务。
- 如果需要事务,那么选择innodb是最稳定的选择,如果不需要事务,并且主要是select和insert操作,那么myisam是不错的选择,一般日志型的应用比较符合这一特性。
- 备份,如果可以定期的关闭服务来执行备份,那么备份的因素可以忽略,但是如果需要在线热备份,那么选择innodb就是基本的要求。
- 崩溃恢复,相对而言,myisam崩毁后发生损坏的概率比InnDB高得多,而且恢复速度也较慢,因此,即使很多人不需要事务,也会选择InnoDB。