免费智能真题库 > 历年试卷 > 数据库系统工程师 > 2010年上半年 数据库系统工程师 上午试卷 综合知识
  第46题      
  知识点:   并发调度的可串行性
  章/节:   事务管理       

 
数据库系统必须控制事务的并发执行,保证数据库(45)。假设事务T1、T2分别对数据A和B进行的操作如下周所示,事务T1与T2间的并发调度为可串行化调度的是(46)。
 
 
  A. 
 
  B. 
 
  C. 
 
  D. 
 
 
 

 
  第45题    2015年上半年  
   34%
假设系统中只有事务T1和T2,两个事务都要对数据D1和D2进行操作。若T1对..
  第60题    2020年下半年  
   45%
如果一个事务已获得数据项R上的共享锁,则其他事务( )。
  第55题    2018年上半年  
   33%
为了防止一个事务的执行影响其他事务,应该采取()。
   知识点讲解    
   · 并发调度的可串行性
 
       并发调度的可串行性
        数据库系统必须控制事务的并发执行以保证数据库处于一致性状态。
               可串行化的调度
               多个事务的并发执行是正确的,当且仅当其结果与某一次序串行地执行它们时的结果相同,称这种调度策略是可串行化的调度(serializability schedule)。
               可串行性是并发事务正确性的准则,按这个准则规定,一个给定的并发调度,当且仅当它是可串行化的才认为是正确调度。
               冲突可串行化
               冲突(conflict):当Ii和Ij是不同事务在相同的数据项上操作的命令,且至少有一个是write命令时,则称Ii与Ij是冲突的。
               考虑某调度S中含有分别属于事务Ti、Tj的两条命令Ii、Ijij)。若Ii、Ij分别访问不同的数据项,则交换Ii、Ij的执行次序不会影响调度执行的结果。若Ii、Ij访问相同的数据项,则Ii、Ij的执行次序可能会影响调度执行的结果。在此只讨论read和write命令在以下四种情况时Ii、Ij是否可交换:
               (1)Ii=read(D),Ij=read(D)。在调度S中,Ii与Tj读到的是相同的数据D值,交换Ii、Ij的执行次序不会影响执行的结果。
               (2)Ii=read(D),Ij=write(D)。在调度S中,若Ii先于Ij执行,那么Ii没有读到Ij写回的D值,可见Ii、Ij的执行次序是非常重要的。
               (3)Ii=write(D),Ij=read(D)。在调度S中,Ii、Ij的执行次序是非常重要的,其原因与(2)类似。
               (4)Ii=write(D),Ij=write(D)。由于Ii、Ij都是写操作,Ii、Ij的执行次序对Ii、Tj没有影响,但是,若调度S中的下一条命令是read(D),那么读取的值会受到影响,因为数据库中只保留了后一条write命令写入的值。
               等价调度:设Ii与Ij是调度S的两条连续的命令,若Ii与Ij是不同事务的命令且不冲突,则可以交换Ii与Ij的顺序得到一个新的调度S*。我们称S与S*是等价的。
               
               事务的并发调度
               例如,考虑上图(a)调度S3,由于T1的write(A)与T0的read(B)不冲突,可以将T1的write(A)与T0的read(B)的执行次序交换,得到另一个等价调度S5,如下图所示。
               
               调度S5
               继续依次交换非冲突命令的执行顺序:
               ①T0的read(B)与T1的read(A)执行次序交换。
               ②T0的write(B)与T1的write(A)执行次序交换。
               ③T0的write(B)与T1的read(A)执行次序交换。
               经过上述一系列交换后得到的是一个如下图(a)所示的串行调度S1。这也说明了调度S5等价于一个串行调度,所以是一个正确的调度。请思考为什么调度S4是一个错误的调度。
               
               事务的串行调度
               冲突等价(conflict equivalent):如果调度S经过一系列非冲突命令交换成S*,则称S与S*是冲突等价的。
               冲突可串行化(conflict serializable):若调度S与一个串行调度S*冲突等价,则S是冲突可串行化的。
               冲突可串行化判定
               在设计并发控制机制时,必须证明该机制产生的调度是否为可串行化的。为了确定一个调度S是否可串行化可以通过S构造一个有向图,也称优先图(precedence graph)。该图由G=(V,E)组成,其中,V是一个顶点集,由所有事务组成;E是一个边集,由满足下述三个条件的边Ti→Ij组成:
               (1)在Ij执行Read(A)之前,Ti执行Write(A)。
               (2)在Ij执行Write(A)之前,Ti执行Read(A)。
               (3)在Tj执行Write(A)之前,Ti执行Write(A)。
               如果优先图中存在边Ti→Tj,则任何等价于S的串行调度S'中,Ti必出现在Tj之前。
               例如,调度S1(参见上图(a))优先图如下图(a)所示,图中只有一条边T0→T1,因为T0的所有命令均在T1之前执行;调度S2(参见上图(b))优先图如下图(b)所示,图中只有一条边T1→T0,意味着T1的所有命令均在T0之前执行。
               
               优先图举例
               但对调度S4(参见下图(b)),其优先图如上图(c)所示,由于T0执行Read(A)先于T1执行Write(A),所以优先图中有一条边T0→T1;又因为T1执行Read(B)先于T0执行Write(B),所以优先图中有一条边T1→T0
               
               事务的并发调度
               如果调度S的优先图中有环,则调度S是冲突不可串行化的;如果图中无环,则调度S是冲突可串行化的。
               可见,要判定冲突是否可串行化,首先需要构造有向图,然后调用环检测算法进行判定。有关环检测算法可参见相关书籍。
   题号导航      2010年上半年 数据库系统工程师 上午试卷 综合知识   本试卷我的完整做题情况  
1 /
2 /
3 /
4 /
5 /
6 /
7 /
8 /
9 /
10 /
11 /
12 /
13 /
14 /
15 /
 
16 /
17 /
18 /
19 /
20 /
21 /
22 /
23 /
24 /
25 /
26 /
27 /
28 /
29 /
30 /
 
31 /
32 /
33 /
34 /
35 /
36 /
37 /
38 /
39 /
40 /
41 /
42 /
43 /
44 /
45 /
 
46 /
47 /
48 /
49 /
50 /
51 /
52 /
53 /
54 /
55 /
56 /
57 /
58 /
59 /
60 /
 
61 /
62 /
63 /
64 /
65 /
66 /
67 /
68 /
69 /
70 /
71 /
72 /
73 /
74 /
75 /
 
第46题    在手机中做本题