数据库系统原理第十四章
Posted 何时能够变强
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库系统原理第十四章相关的知识,希望对你有一定的参考价值。
1.事务的概念:
- 事务是访问并可能更新各种数据项的程序执行单位。
- E.g.将50美元从账户A转到账户B:
- read(A)
- A := A – 50
- write(A)
- read(B)
- B := B + 50
- write(B)
- 两个问题需要解决:
1.各种类型的故障,如硬件故障和系统崩溃
2.多个事务的并发执行
2.事务的必需属性
- 原子性:如果发生崩溃,应该保证不会更新,保持数据一致性。
- 永久性:一旦用户被告知交易已经完成(即,50美元的转账已经发生),交易对数据库的更新必须持续,即使有软件或硬件故障。
- 一致性:事务在开始执行时,必须看到一致的数据库。在事务执行期间,数据库可能会暂时不一致。当事务成功完成时,数据库必须是一致的.
- 隔离性:对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务。
3.事务状态
- 活动状态:初始状态;事务执行时处于这个阶段。
- 部分提交状态:最后一条语句被执行
- 失败状态:发现正常的执行不能继续
- 中止状态:事务回滚并且数据库已经被恢复到事务开始执行前的状态,中止后两个选择:1.重启事务:仅当内部没有逻辑错误时,2.杀死事务。
- 提交状态:成功完成后。
4.并发执行
- 系统允许多个事务同时执行,好处是:
1.增加处理器和磁盘利用率,导致更大的事务吞吐量。例如:当一个事务正在读写磁盘的时候,另一个事务可以使用CPU。
2.减少平均响应时间:短的事务不需要在长事务之后等待。 - 并发控制机制:实现隔离的机制。
即,控制并发事务之间的相互影响以防他们破坏数据库的一致性。
5.调度
- 调度:用于表示并发事务中的指令被执行的时间顺序的一个指令顺序。
1.一组事务的一个调度必须包含这一组事务的全部指令。
2.必须保持指令在各个事务中出现的顺序(不改变其顺序) - 一个成功完成执行的事务会用一个提交指令作为最后声明
1.默认事务执行提交指令作为最后一个步骤。 - 一个没能成功完成执行的事务会用一个终止指令作为最后声明。
6.可串行性
- 基础假设:每个事务都保证数据库一致性。
- 故一系列事务的串行执行保证数据库的一致性。
- 一个(可能是并发的)调度是可串行化的,如果它等价于一个串行调度。不同形式的等价调度引出了:
1.冲突可串行性
2.视图可串行性
7.事务的简化视图
- 无视read和write执行之外的操作。
- 假设事务在读和写之间的本地缓冲区上可以对数据进行任意的计算。
- 简化后的调度只包含read和write指令。
8.指令冲突
- 指令li和lj分别属于事务Ti和Tj,发生冲突当且仅当存在某些项Q被li和lj访问,且至少这些指令之一对Q进行写入.
- 直觉上,li和lj之间的冲突迫使它们之间有一个(逻辑的)时间顺序。如果li和lj在一个时间表中是连续的,并且它们不冲突,那么即使它们在时间表中互换了,它们的结果也将保持不变。
9.冲突可串行性
- 如果调度S可以通过一系列非冲突指令的交换转换为调度S’,我们称S和S‘是冲突等价的。
- 我们称调度S是冲突可串行化的,如果它冲突等价于一个串行调度。
10.可串行性判定
- 考虑一些事务T1,T2,…Tn的调度。
- 优先图 —— 一个有向图,其中的顶点是事务(名字).
- 我们从 Ti 到 Tj 画一条弧,如果两个事务是冲突
的, 且 Ti 先访问出现冲突的数据项。 - 我们可以用访问的项来标记弧线。
- 这里有一个例子:
根据上面表中的冲突判断,只要两个事务中存在对一个数据的写操作,那么两个事务就是冲突的。比如T1和T2,对Y的访问,T2有写操作,所以T1和T2冲突,且T1先访问数据Y所以是T1指向T2,其余的类似。
11.冲突可串行性判定
- 一个调度是冲突可串行化的当且仅当其优先图是无环的.
- 环检测算法需要 n^2 数量级的运算, 其中 n 是图中顶点数.
=>(更好的算法需要 n + e 数量级的运算,其中 e 是边数.) - 如果优先图是无环的, 串行化顺序可以通过图像的拓扑排序获得.
- 如图可以将(a)序列转化为(b)或者(c)。
12.可恢复调度
- 需要撤销并发事务中失败的事务造成的影响。
- 可恢复调度 — 如果一个事务 Tj 读取了以前由事务Ti 写入过的数据 , 则Ti 的提交操作出现在Tj 的提交操作之前.
13.级联回滚
- 级联回滚 —— 一个单独的事务失败导致一系列事务回滚. 考虑下列事务,其中没有事务已经提交(所以该调度是可恢复的)。
如果 T10 失败了, T11 和 T12 必须被回滚.可能导致大量工作没有完成。
14.无级联调度
- 无级联调度 — 不会发生级联回滚; 对满足 Tj 读取之前由Ti 写入的数据项的每一对事务 Ti 和 Tj,Ti 的提交操作出现在Tj 的读取操作之前。
- 每个无级联调度也都是可恢复的。
- 将调度限制为无级联调度是可取的。
15.并发控制
- 数据库必须提供一个机制以确保所有可能的调度都是:
1.冲突可串行化或者视图可串行化。
2.可恢复且最好是无级联的。 - 一次只执行一个事务的政策生成串行调度,但是并发程度很低
1.串行调度是可恢复/无级联? - 在调度执行以后才判定可串行性有些太迟了。
- 目标——改善能保证可串行性的并发控制协议。
16.一致性的弱级别
- 一些应用愿意接受弱级别的一致性,允许一些非可串行化的调度。
1.例如:一个只读事务想获得所有账户的近似总额。
2.例如:为查询优化而计算的数据库统计可能是近似的。(为什么)
3.这样的事务对于其他事务不需要是可串行化的。 - 为了性能而权衡精确度。
以上是关于数据库系统原理第十四章的主要内容,如果未能解决你的问题,请参考以下文章