第13章 事务
考试范围: 13.1-13.10
考试题型: 事务操作
考试内容:
1、事务的概念与特性(ACID)
-
概念
- A transaction is a unitof program execution that accesses
and possibly updates various data items - 事务是程序执行的单元,它访问并可能更新各种数据项
- A transaction is a unitof program execution that accesses
-
ACID性质
2、事务的状态图
3、事务调度(schedule)的概念
- 假设 I、J 是分别来自两个不同事务的两个操作,它们的关系有以下五种情况:
- I 和 J 的目标数据项不一样或没有任何共同的数据项。这种情况,无论 I 先执行还是 J 先执行,结果都是一样的,所以 I 和 J 的相对顺序不重要。
- I=read(Q), J=read(Q),I 和 J 的相对顺序也不重要,因为不管是哪种顺序,它们读到的都是数据项 Q 相同值。
- I=read(Q), J=write(Q),如果 I 先执行,则 I 读取到的是 Q 被 J 修改之前的值,如果 J 先执行,则 I 读取到的是 J 更新后的 Q 值。所以 I 和 J 的相对顺序很重要。
- I=write(Q), J=read(Q),上一种情况的对称版。
- I=write(Q), J=write(Q),两者都是写操作,后写的会覆盖先写的值,导致后续读操作只能读取到后写的值,如果 I 和 J 的相对顺序不一样,则后续读操作读取到的值也不一样。如果后续再没有其他写入 Q 的操作,则它们的相对顺序不一样,导致最后数据库中的 Q 值也不一样。所以 I 和 J 的相对顺序很重要。
4、可恢复调度/级连回滚的概念
-
可恢复调度 Recoverable Schedules
- For each pair of transactions X and Y, if Y reads a data item previously written by X, then Y must commit after X has committed(如果 Y读了X修改过的数据,那么在 X提交后,Y 才能提交)
-
级联回滚 Cascading Rollbacks
- a single transaction failure leads to a series of transaction rollbacks. 单个事务失败会导致一系列事务回滚。
Cascading rollback is undesirable, since it leads to the undoing of a significant amount of work 级联回滚是不可取的,因为它会导致大量工作的撤消 - [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dmbAutGS-1671617523265)(C:\Users\WZT\AppData\Roaming\Typora\typora-user-images\1670547147093.png)]
- a single transaction failure leads to a series of transaction rollbacks. 单个事务失败会导致一系列事务回滚。
5、串行调度/并发调度
-
串行调度(Serial Schedule )
- The transactions execute one by one, without interleaving(事务逐个执行,无需交错)
- The transactions execute one by one, without interleaving(事务逐个执行,无需交错)
-
并发调度
- 使用并发执行的动机
- 提高吞吐量(throughput)(在给定时间内执行的事务数)和资源利用率
- 减少平均响应时间(average response time)(提交事务后完成事务的平均时间)
- Concurrency control schemes 并发控制方案
- 实现隔离的机制;即控制并发事务之间的交互
- 使用并发执行的动机
6、冲突等价/冲突可串行化/冲突等价可串行化的判断
-
Serializability 可串行化
- A schedule is serializable if it is equivalent to a serial schedule(如果一个调度能够与某个串行调度等价,它就是“可串行化”的,也叫“可串行化调度”)
-
冲突等价 conflict equivalent
- If a schedule S can be transformed into a schedule S’ by a series of swaps of consecutive non-conflicting instructions, we say that S and S’ are conflict equivalent(如果一个调度S可以通过一系列连续的非冲突指令的交换转换为调度S’,我们说S和S’是冲突等价的)
-
冲突可串行化
-
We say that a schedule S is conflict serializable (冲突可串行化) if it is conflict equivalent to a serial schedule
-
即:如果把一个调度S中的不冲突命令调换位置后,可得到一个串行调度,那么这个调度S是“冲突可串行化”
-
上图中,通过四次调换相邻的不冲突操作的相对顺序,最后得到了一个串行 schedule(先执行事务 1 再执行事务 2),即 S1 和一个串行 schedule 冲突等价。即S1是冲突可串行化的
-
优先图
-
每个事务在优先图中都是一个节点
-
如果事务 1 中的操作 I 和事务2中的操作 J 冲突,且操作 I 在 J 之前,则从事务 1 连一条指向事务 2 的有向边,如果操作 I 在 J 之后,则从事务 2 连一条事务 1 的有向边。
-
如果事务1 和事务 2 中有多对操作冲突且都是事务 1 中的操作在前,只需要一条从事务 1 指向事务 2 的有向边就行,不需要多条。因为优先图中的有向边只是用来表示是否存在依赖关系的,不用表示数量。
-
如果 schedule 的优先图中不存在环,则 schedule 是冲突可串行化的,否则 schedule 不是冲突可以串行化的
-
示例
-
① 事务 1 中的
read1[A]
和 事务 2 中的write2[A]
冲突,事务 1 中的write1[A]
和事务 2 中read2[A]
、write2[A]
冲突,但冲突的操作对中,都是事务 1 中的操作在前,所优先图中只存在一条从事务 1 到事务 2 的有向边。由于优先图中没有环,所以该 schedule 是冲突可串行化的。 -
② 事务 1 中的
read1[A]
和事务 2 中的write2[A]
冲突,且read1[A]
在前,所以优先图中存在一条从事务 1 指向事务 2 的有向边。事务 1 中的write1[A]
和事务 2 中的read2[A]
冲突,且read2[A]
在前,所以优先图中存在一条从事务 2 指向事务 1 的有向边。事务 1 和事务 2 以及两条有向边形成了一个环,所以该 schedule 不满足冲突可串行化。
-
-
-