并发调度的可串行性
2014-08-28 15:40
176 查看
转载地址:http://course.cug.edu.cn/cug/database/netclass/CHAPT8/8.5/8.5.htm
计算机系统对并发事务中并发操作的调度是随机的,而不同的调度可能会产生不同的结果,那么哪个结果是正确的,哪个是不正确的呢?
如果一个事务运行过程中没有其他事务同时运行,也就是说它没有受到其他事务的干扰,那么就可以认为该事务的运行结果是正常的或者预想的。因此将所有事务串行起来的调度策略一定是正确的调度策略。虽然以不同的顺序串行执行事务可能会产生不同的结果,但由子不会将数据库置于不一致状态,所以都是正确的。
定义 多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行它们时的结果相同,我们称这种调度策略为可串行化(Serializable)的调度。
可串行性(Serializability)是并发事务正确性的准则。按这个准则规定,一个给定的并发调度,当且仅当它是可串行化的,才认为是正确调度。
例如,现在有两个事务,分别包含下列操作:
事务T1:读B;A=B+1;写回A;
事务T2:读A;B=A+1;写回B;
假设A,B的初值均为2。按T1→T2次序执行结果为A=3,B=4;按T2→T1次序执行结果为B=3,A=4。
图8.5给出了对这两个事务的三种不同的调度策略。
图8.5(a)和(b)为两种不同的串行调度策略,虽然执行结果不同,但它们都是正确的调度;图8.5(c)产两个事务是交错执行的;由于其执行结果与(a),(b)的结果都不同,所以是错误的调度;图8.5(d)中两个事务也是交错执行的,其执行结果与串行调度(a)执行结果相同,所以是正确的调度。
图8.5
为了保证并发操作的正确性,DBMS的并发控制机制必须提供一定的手段来保证调度
是可串行化的。
从理论上讲,在某一事务执行时禁止其他事务执行的调度策略一定是可串行化的调度,这也是最简单的调度策略,但这种方法实际上是不可取的,这使用户不能充分共享数据库资源。目前DBMS普遍采用封锁方法实现并发操作调度的可串行性,从而保证调度的正确性。
两段锁(Two-Phase Locking,简称 2PL)协议就是保证并发调度可串行性的封锁协议。
除此之外还有其他一些方法,如时标方法、乐观方法等来保证调度的正确性。
计算机系统对并发事务中并发操作的调度是随机的,而不同的调度可能会产生不同的结果,那么哪个结果是正确的,哪个是不正确的呢?
如果一个事务运行过程中没有其他事务同时运行,也就是说它没有受到其他事务的干扰,那么就可以认为该事务的运行结果是正常的或者预想的。因此将所有事务串行起来的调度策略一定是正确的调度策略。虽然以不同的顺序串行执行事务可能会产生不同的结果,但由子不会将数据库置于不一致状态,所以都是正确的。
定义 多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行它们时的结果相同,我们称这种调度策略为可串行化(Serializable)的调度。
可串行性(Serializability)是并发事务正确性的准则。按这个准则规定,一个给定的并发调度,当且仅当它是可串行化的,才认为是正确调度。
例如,现在有两个事务,分别包含下列操作:
事务T1:读B;A=B+1;写回A;
事务T2:读A;B=A+1;写回B;
假设A,B的初值均为2。按T1→T2次序执行结果为A=3,B=4;按T2→T1次序执行结果为B=3,A=4。
图8.5给出了对这两个事务的三种不同的调度策略。
图8.5(a)和(b)为两种不同的串行调度策略,虽然执行结果不同,但它们都是正确的调度;图8.5(c)产两个事务是交错执行的;由于其执行结果与(a),(b)的结果都不同,所以是错误的调度;图8.5(d)中两个事务也是交错执行的,其执行结果与串行调度(a)执行结果相同,所以是正确的调度。
图8.5
为了保证并发操作的正确性,DBMS的并发控制机制必须提供一定的手段来保证调度
是可串行化的。
从理论上讲,在某一事务执行时禁止其他事务执行的调度策略一定是可串行化的调度,这也是最简单的调度策略,但这种方法实际上是不可取的,这使用户不能充分共享数据库资源。目前DBMS普遍采用封锁方法实现并发操作调度的可串行性,从而保证调度的正确性。
两段锁(Two-Phase Locking,简称 2PL)协议就是保证并发调度可串行性的封锁协议。
除此之外还有其他一些方法,如时标方法、乐观方法等来保证调度的正确性。
相关文章推荐
- 并发调度的可串行性
- 数据库 - 并发调度的可串行性
- 并发调度的可串行性
- 并发调度的可串行性
- 数据库—并发调度的可串行性
- 三级封锁协议和并发调度的可串行性
- boost中asio网络库多线程并发处理实现,以及asio在多线程模型中线程的调度情况和线程安全。
- Golang和Erlang的并发调度浅析
- Erlang并发机制 –进程调度
- 【Java基础总结】-了解Java线程调度、并发安全及锁优化
- 【JEECG TBSchedule】详解应对平台高并发的分布式调度框架TBSchedule
- 详解应对平台高并发的分布式调度框架TBSchedule
- 基于嵌入式操作系统VxWorks的多任务并发程序设计(3) ――任务调度
- Goroutine并发调度模型深度解析之手撸一个协程池
- jmeter定时调度,持续并发,使用简介
- 解决kettle调度效率低,不可高并发调度方法
- 详解应对平台高并发的分布式调度框架TBSchedule
- 数据库之并发控制调度
- 事务并发调度之封锁技术
- 线程的基本属性(分离,栈大小,保护区,竞争,调度并发)以及TSD特定数据