第13章 事务

第13章 事务

考试范围: 13.1-13.10

考试题型: 事务操作

考试内容:

1、事务的概念与特性(ACID)

  • 概念
    • A transaction is a unitof program execution that accesses
      and possibly updates various data items
    • 事务是程序执行的单元,它访问并可能更新各种数据项
  • 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)]

5、串行调度/并发调度

  • 串行调度(Serial Schedule
    • 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’是冲突等价的)
    • img
  • 冲突可串行化
    • 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 是冲突可串行化的。

          img

        • ② 事务 1 中的 read1[A] 和事务 2 中的 write2[A] 冲突,且 read1[A] 在前,所以优先图中存在一条从事务 1 指向事务 2 的有向边。事务 1 中的 write1[A] 和事务 2 中的 read2[A] 冲突,且 read2[A] 在前,所以优先图中存在一条从事务 2 指向事务 1 的有向边。事务 1 和事务 2 以及两条有向边形成了一个环,所以该 schedule 不满足冲突可串行化。

          img

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值