MySQL最重要的特性是数据的处理与存储分离的存储引擎架构。
一、MySQL逻辑架构
1)第一层架构 —— 连接处理、授权认证、安全等。
2)第二层架构 —— MySQL的核心服务功能:存储过程、触发器、视图、查询缓存、查询解析、查询优化、函数等等。
3)第三层架构 —— 实现了不同的存储引擎,存储引擎负责MySQL中数据的存取。
二、并发控制
MySQL多个存储引擎的架构提供了多粒度封锁机制。其中两种最重要的锁策略是:表锁 —— 锁定整张表。存储引擎和MySQL服务器都实现了表锁。
行级锁 —— 锁定元组。InnoDB和XtraDB,以及其他一些存储引擎中都实现了行级锁。行级锁只在存储引擎层实现。
三、事务
在MySQL中,用户可以根据业务是否需要事务处理,来选择合适的存储引擎。对于一些事务的查询类应用,选择一个非事务型的存储引擎,可以获得更高的性能。
3.1、隔离级别
PEREATABLE READ是MYSQL的默认事务隔离级别。
可以在配置文件中设置整个数据库的隔离级别,也可以只改变当前会话的隔离级别:
3.2、死锁
InnoDB目前处理死锁的方法是,将持有最少行级排他锁的事务进行回滚。
3.3、事务日志
事务日志提供了类似缓存的功能,使多次修改的数据可以缓慢刷回磁盘。
同时事务日志也提供了数据库故障恢复的功能。
3.4、MySQL中的事务
InnoDB采用的是两段锁协议。在事务执行过程中,随时都可以执行锁定,锁只有在执行COMMIT或者ROLLBACK的时候才会释放,并且所有的锁是在同一时刻被释放。
四、多版本并发控制
后面更新。。。
五、MySQL的存储引擎
5.1、InnoDB存储引擎
InnoDB采用MVCC来支持高并发,并且实现了四个标准的隔离级别。默认级别是REPEATABLE READ(可重复读),并且通过间隙锁策略防止幻读的出现。
5.2、MyISAM存储引擎
MyISAM提供了大量的特性,包括全文索引、压缩、空间函数(GIS)等,但MyISAM不支持事务和行级锁,而且有一个毫无疑问的缺陷就是崩溃后无法安全恢复。
5.3、选择合适的存储引擎
除非需要用到某些InnoDB不具备的特性,并且没有其他办法可以替代,否则都应该优先选择InnoDB引擎。