高性能MySQL-第一章-MySQL架构与历史

  • 1.1 MySQL逻辑架构
  • 1.2 并发控制
  • 1.3 事务

1.1 MySQL逻辑架构

mysql归档逻辑 mysql逻辑或_死锁


第一层: 网关层(个人理解), 主要是对一些连接校验, 授权认证等等.

第二层: 核心层,MySQL一些核心操作都在这一层中-内置函数,存储过程,触发器.

第三层: 存储引擎层-InnoDB,MyISAM等

1.2 并发控制

  1. 读写锁
    读锁(共享锁): 读锁 不阻塞 其他线程.
    写锁(排他锁): 写锁 阻塞 其他线程
  2. 锁粒度
    表锁: 锁定整张表
    行锁: 锁定表中某一行, 在存储引擎实现

1.3 事务

典型案例: 转账操作
ACID特性: 原子性、一致性、持久性、隔离性

1.3.1 隔离级别:

mysql归档逻辑 mysql逻辑或_MySQL_02


未提交读: 该级别事务,即使未提交,其他事务也可以读到其未提交的数据,也叫做“脏读”,因此不建议使用改级别。

读已提交: 是大多数数据库默认级别(但MySQL不是),一个事务开始时,只能读取 已经提交的事务做的修

MySQL为repeatable。
原因:在 5.0之前只有statement一种格式,而主从复制存在了大量的不一致,故选用repeatable。
参考:

改。

可重复读: 可重复读解决了“脏读” 问题,保证同一个事务多次读取结果是一致的。但是存在幻读问题:
串行化: 串行化为读取的每一行数据都加锁,可能导致大量的超时和锁竞争。

幻读:某个事务正在读取某个范围的记录时,另外一个事务又在该范围内插入了新的记录,当之前的事务再次读取该范围的记录时,会产生“幻行”。

1.3.2
死锁: 两个或多个事务互相等待资源释放
解决方案: 死锁检测、死锁超时
比如InnoDB存储引擎,检测到死锁的循环依赖, 就立即返回一个错误。
InnoDB目前处理死锁的方法是: 将持有最少行级排他锁的事务进行回滚。