数据库系统原理——第十一章并发控制复习题
1.并发操作会带来哪些数据不一致性,引起不一致的原因是什么?
2.基本的封锁类型有几种?试叙述它们的含义。
3.叙述数据库中死锁产生的原因和解决死锁的方法。
4.设T1, T2,T3是如下的三个事务:
T1: A=A+3; T2: A=A*5; T3: A=A**2 (A←A^2) 设A的初值为0;
若这三个事务允许并发执行,请问有多少种可能的正确结果?请一一列举出来。
5.请用基本的封锁协议解决并发控制带来的不一致性问题。
答:1、并发操作会带来的数据不一致性主要包括以下几种情况:引起这些不一致性的原因主要是多个事务并发执行时,没有采取适当的隔离措施或并发控制机制,导致它们对数据项的访问和修改发生冲突。
①丢失修改:两个或多个事务同时读取并修改同一数据项,其中一个事务的修改结果被另一个事务的修改结果覆盖,导致部分或全部修改丢失。
②不可重复读:一个事务读取某个数据项后,另一个事务修改了该数据项,导致前一个事务无法再次读取到相同的数据值。
③读“脏”数据:一个事务修改了某个数据项,但尚未提交其更改时,另一个事务读取了这个未提交的更改。如果第一个事务撤销其更改,则第二个事务读取到的数据将是“脏”数据,即不正确的数据。
引起这些不一致性的原因主要是多个事务并发执行时,没有采取适当的隔离措施或并发控制机制,导致它们对数据项的访问和修改发生冲突。
2、基本的封锁类型有两种:
①排它锁(Exclusive Lock,X锁):又称写锁,用于阻止其他事务对同一数据项进行读取或修改。当一个事务对某个数据项加上X锁后,其他事务必须等待该事务释放锁后才能访问该数据项。
②共享锁(Share Lock,S锁):又称读锁,允许多个事务同时读取同一数据项,但阻止其他事务对该数据项进行修改。当一个事务对某个数据项加上S锁后,其他事务可以继续对该数据项加S锁,但不能加X锁。
3、死锁产生的原因:两个或多个事务都在等待对方释放资源,导致它们都无法继续执行,形成死循环等待。
常见的死锁场景包括:两个事务分别锁定不同的资源,并且都试图锁定对方已经锁定的资源;一个事务先锁定一个资源,然后尝试锁定另一个资源,而另一个事务则相反,导致双方都在等待对方释放资源。
解决死锁的方法:
①预防策略:通过设计数据库和事务来尽量避免死锁的发生,例如按照相同的顺序锁定资源、限制事务的持有锁的时间等。
②诊断与恢复:当检测到死锁时,数据库管理系统会选择一个事务作为“牺牲品”并回滚该事务,从而打破死锁。同时,数据库管理系统会记录死锁的相关信息,以便管理员进行问题诊断和优化。
③超时设置:为事务设置超时时间,如果事务在等待资源时超过了设定的时间,则自动回滚该事务,避免长时间等待导致的死锁。
4、A的最终可能结果有3、9、15、225、45。
串行执行的次序有:T1T2T3、T1T3T2、T2T1T3、T2T3T1、T3T1T2、T3T2T1
正确的唯一结果列表是225、45、9、3、15
5、基本的封锁协议是解决并发控制问题的重要手段,它通过管理并发访问数据来确保事务的隔离性和一致性。以下是几种常见的基本封锁协议:
①两阶段封锁协议
两阶段封锁协议是一种经典的封锁协议,包括两个阶段:
封锁阶段(Growing Phase):事务可以获取封锁(锁定)并访问数据,但不能释放任何封锁。
释放阶段(Shrinking Phase):事务可以释放封锁,但不能获取新的封锁。
具体执行方式包括:
获取封锁(Lock Acquisition):事务在访问数据之前必须先获取所需的封锁。封锁可以是共享锁(读锁)或排他锁(写锁)。
持有封锁(Lock Holding):一旦事务获取了封锁,就必须保持封锁直到事务结束。
释放封锁(Lock Release):事务在不再需要数据时释放封锁。
两阶段封锁协议的优点是简单且易于实现,确保了事务的串行化执行序列是可串行化的。但它可能存在死锁问题,需要采用死锁检测和解决机制。
②严格封锁协议(Strict Two-Phase Locking Protocol)
严格封锁协议是两阶段封锁协议的变种,它要求事务在释放任何封锁之前,必须完成所有的数据操作。这可以防止写操作的插入问题(即在事务未完成之前其他事务不能读取已修改的数据),从而提高了并发控制的严格性。
③可串行化封锁协议(Serializable Locking Protocol)
可串行化封锁协议确保了事务的并发执行序列是可串行化的,即结果与某个串行执行序列的结果相同。这可以通过强制事务按特定顺序获取和释放封锁来实现。