07 事务
1. 认识事务
1.1 概述
-
在事务中的操作,要么全成功,要么全失败
-
ACID
-
A:原子性
- 事务不可分割
-
C:一致性
- 事务失败或成功后,数据库仍保持一致的状态
-
I:隔离性
- 事务提交成功前,修改对其他事务不可见
- 其他说法:并发控制、可串行化、锁
-
D:持久性
- 事务一旦提交成功,结果将是永久的
- 保证了数据库系统的高可靠
-
1.2 分类
- 扁平事务
- 带有保存点的扁平事务
- 链事务
- 嵌套事务
- 分布式事务
2. 事务的实现
隔离性:锁
原子性、持久性:redo log,恢复事务提交修改的页
一致性:undo log,是逻辑日志,回滚行记录到某个特定的版本
2.1 redo
2.2 undo
- 不是回滚到事务最开始的样子,不然可能影响其他事务
- MVCC
- undo log 会产生 redo log
2.3 purge
- delete 和 update 可能并不直接生效,因为其他事务可能还在用被 delete 或 update 的数据
2.4 group commit
-
- 先将事务重做日志写入缓冲池
- 写入磁盘(比 1 慢)
- 当存在事务执行步骤 2 时,其他事务先不执行步骤 2,等正在提交的事务完成提交操作后,再执行步骤 2,可以将多个事务的重做日志一次性 fsync 刷新到磁盘,大大减小磁盘压力
3. 事务控制语句
4. 隐式提交的语句
DDL 语句
修改用户、权限
管理语句
5. 事物操作统计
QPS
- 每秒请求数
TPS
- 每秒事务处理能力
- (com_commit+com_rollback)/time
前提:显示提交
SHOW GLOBAL STATUS LIKE 'com_commit';
6. 事务的隔离级别
RU:Read Uncommitted
- 浏览访问
RC:Read Committed
- 游标稳定
- 解决:赃读
RR:Repeatable Read
- 2.9999° 的隔离,没有幻读的保护
- 解决:赃读,不可重读
S:Serializable
- 隔离,或 3° 的隔离
- 解决:赃读、不可重读、幻读