DBMS事务和可序列化

时间:2014-11-19 17:32:37

标签: sql database oracle transactions isolation-level

我们知道:

  

以一种方式对齐事务的计划   事务首先执行。第一个事务完成时   它的循环然后执行下一个事务。交易是订购的   一个接一个。这种类型的计划称为串行计划   交易以连续方式执行。

  

如果两个事务是相互的,那么这个执行没有坏处   独立和处理不同的数据部分,但以防万一   两个交易正在处理相同的数据,结果可能会有所不同

那么发现两个事务是Serialize Schedule的好处是什么?如果结果有所不同,有什么好处?

1 个答案:

答案 0 :(得分:1)

当事务访问相同的变量但是串行执行(即不同时执行)时,从某个事务只执行一次(可能重复)时,就会产生“结果可能变化”的感觉。对于串行事务,我们不知道执行(非重叠)事务的顺序。我们在重复事务执行开始时所知道的是,自上次执行结束以来,其他事务可能已经更改了变量。重复交易。 (虽然我们通常知道某些事情关于他们如何离开。)

这种“不同结果”没有任何问题,因为它们只反映了在不同时间要求交易。

当事务访问相同的变量并同时执行(即不是连续执行)时,那么对于每个事务,“结果可能会有所不同”(在另一种意义上)与我们通常理解代码的方式不同。正常的理解依赖于一次只执行一个事务。例如,通常如果代码在没有写入的情况下读取变量两次,那么我们期望得到相同的值。但是,如果另一个事务在读取之间写入,则无法保证。例如,通常如果代码读取变量,那么我们期望获得变量实际具有的值。但是,如果我们得到它的一些字节然后另一个事务写入它然后我们从该新值获得剩余的字节,那就不能保证。

但是如果事务是可序列化的,那么它们可以非串行地执行(具有重叠)但具有相同的结果,就好像它们是串行执行的(没有重叠)。然后代码表示当只有一个事务正在执行时它通常意味着什么。

所以我们必须确保系统就像交易是串行的一样,否则我们不知道我们的程序做什么

可序列化的调度是来自多个事务的操作的交错,其给出与某些串行(调度)调度相同的结果。 执行可序列化计划的好处与仅仅执行一个事务的所有操作之后的操作不同,是同时从多个事务执行多个操作的吞吐量提高。

PS

您的报价出现在web page上,这是一团糟。它甚至没有定义“可序列化的时间表”。引文之间的文字是

  

在多事务环境中,串行计划被视为   基准。事务中指令的执行顺序   不能改变,但两个交易可以有他们的指示   随机执行。

但是第二句应该从开始但是在一个非连续的时间表中...... 。因为在序列计划中“交易是一个接一个地排序的”。因此,报价中的“结果可能会有所不同”是非串行计划中的

但你没有回复我的评论:

  

“此执行”是指交易的串行执行还是   到非串行执行交易? (在你之前发生了什么   第二个引用?)