Skip to content

事务调度

Transaction schedule · Database schedule

以保持各事务内部程序次序的事件序列表示并发交错,并显式记录读取来源、提交和中止。

条目类型
定义

形式陈述

设事务集合为 T={T1,,Tn}。事务调度 S 是读、写、提交和中止事件组成的有限 序列;它必须保持每个 数据库事务 自身的程序次序。若 πi(S) 删除不属于 Ti 的事件,则 πi(S) 应是 Ti 原执行的前缀,完整调度中的投影还应以 ciai 结束。

常用记号为 ri(x)vwi(x,v)ciai。仅写 ri(x) 会隐藏读到哪个值,因此严格分析还要给出 reads-from:若 rj(x) 返回 Ti 写入的版本,记 TirfTj;若返回调度开始前的值,则称为 initial read。每个读必须对应当时按所选版本语义可见的一个写。

串行调度让一个事务终止后下一个才开始;并发调度则允许不同投影交错。调度是观察模型,不等同于线程真实同时运行:两个并行动作最终仍以某个事件次序进入该模型。若系统需要表达真正并列事件或弱内存偏序,必须另换语义,不能把一个随意排序当成已证明等价。

前缀调度可以含 pending 事务,完整调度则为每个出现的事务给出终止事件。良构性还要求一次读只返回一个值、终止后没有普通操作、同一事务不同时 commit 与 abort。性质若只检查已提交投影,应明确怎样处理 pending 和已中止事件,不能在反例出现后临时删除不利事务。

直觉

每个事务像一条保持自身字序的句子,调度把多条句子的字交织成一行。交织不能颠倒任何一句内部的字,却可能让一个事务在另一个提交前读到它的写。正是这条总记录,使“谁影响了谁”可以落成边与公式。

调度不先判好坏。它忠实记录一次可能正确、可能不可恢复、也可能不可串行化的执行。后续性质在同一个对象上逐层提问:冲突图是否有环,读者是否早于写者提交,崩溃时哪些事务已作出决定。

例子与边界

初值 x=5,y=7。事务 T1 把一单位从 x 移到 yT2 把读到的 x 加倍。考虑

text
r1(x)->5; w1(x,4);
r2(x)->4; w2(x,8);
r1(y)->7; w1(y,8);
c1; c2

两个事务各自的事件次序都未改变,所以这是一个调度。r2(x) 的 reads-from 是 w1(x,4),但它发生在 c1 前;调度对象由此保留了一次未提交读取。它是否可接受,要交给可恢复调度或更强条件判断,不能从“保持程序次序”推出。

若把 r1(y) 移到 w1(x,4) 前,仍可能保持 T1 的源码次序吗?答案取决于原事务程序;调度定义不能自行重排同一事务。若日志只记录写而省略读,也无法恢复 reads-from,因而不足以判定视图等价或读取异常。

中止事件还带来另一层边界。调度可以记录 a1,但“删除 T1 的写”需要恢复语义;物理页上是否曾出现这些值不是调度单独回答的问题。分析可串行性时必须说明只看已提交投影,还是使用包含中止与补偿的扩展历史。

单版本解释中,rj(x) 通常读它之前最近且未被撤销的可见写;多版本解释还要给版本序与读视图。同一串事件若省略版本标识,可能在两种模型下得到不同 reads-from,因此“把调度交给判定器”前必须固定读取语义。

推论与应用

事务调度是 冲突可串行化视图可串行化、SQL 隔离现象以及恢复性层级的共同输入。共享一个明确事件字母表能避免同一符号在一处表示逻辑写、另一处却表示物理页刷盘。

测试工具可从数据库 trace 归一化出候选调度,但墙钟时间相同不等于事件相同,缺失的读值也不能靠最终状态唯一补回。要把运行日志用于证明,必须说明事务标识、操作边界、提交结果及不确定顺序如何处理。

调度还可以作为并发测试的缩减对象:保留每个事务程序次序与真实冲突次序,折叠不影响数据库观察的线程内部计算。缩减是否可靠取决于投影定义;把触发器写、索引范围锁或约束查询漏掉,会制造一个比真实执行更温和的调度。

参考资料
  • Philip A. Bernstein, Vassos Hadzilacos, and Nathan Goodman, Concurrency Control and Recovery in Database Systems, Addison-Wesley, 1987, Ch. 2。
  • Christos H. Papadimitriou, The Theory of Database Concurrency Control, Computer Science Press, 1986, Chs. 2–3。
  • Jim Gray and Andreas Reuter, Transaction Processing: Concepts and Techniques, Morgan Kaufmann, 1992, Chs. 6–7。
关系图谱11 个相邻概念 · 1 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组