Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 的用法 » 创建数据库 » 使用事务和隔离级别 » 选择隔离级别

 

可序列化调度

要并发处理事务,数据库服务器必须执行一个事务中的部分语句,然后执行其它事务的一些语句,然后再继续处理第一个事务中后面的操作。交错执行各个事务中部分操作的顺序称作调度

以这种方式并发地应用多个事务可能会产生多种结果,包括上文中介绍的三种特殊的不一致情况。有时,也可能达到数据库的最终状态,就象依次执行各个事务时那样,意思是说,始终在一个事务全部处理完成之后再开始处理下一个事务。只要在按某个顺序依次执行事务时,数据库达到的状态与实际的调度相同,那么这个调度就叫做可序列化调度。

可序列化性是判断正确性的公认标准。我们认为可序列化调度是正确的,因为数据库没有因并发执行事务而受到影响。

隔离级别会影响事务的可序列化性。在隔离级别 3 上,所有调度都是可序列化的。缺省设置为 0。

可序列化意味着并发不会产生附加影响

即使在依次执行事务时,数据库的最终状态也取决于执行这些事务的顺序。例如,如果一个事务将某个特定单元设置为值 5,而另一个事务将其设置为数字 6,那么该单元的最终值将由最后执行那个事务确定。

了解调度可序列化并不能确定按哪个顺序执行事务最好,而只能说明并发不会产生附加影响。按某种顺序依次执行一组事务得到的所有结果都被认为是正确的。

不可序列化的调度将会造成不一致

如果调度不可序列化,将出现多种不一致问题。典型的不一致类型中介绍的不一致就是其中的典型问题。在每种情况下,出现不一致的原因都在于交错执行语句的方式;如果所有事务依次执行,不可能产生这种结果。例如,只有在这种情况下才会发生脏读:一个事务可以选择某些行而同时另一个事务正在同一行中插入数据或更新数据时。