数据库并发控制:预防死锁策略与活死锁处理

需积分: 17 2 下载量 28 浏览量 更新于2024-08-15 收藏 1.08MB PPT 举报
在《数据库系统概论》的第十一章,"并发控制"这一章节中,主要讨论了在多用户数据库系统中,特别是飞机定票和银行等应用场景下,由于支持多个并发事务执行的不同方式而产生的问题。这些方式包括事务的串行执行、交叉并发和同时并发,其中串行执行可能导致资源利用率低,而并发执行则可能引发事务间的数据冲突,如数据不一致性和破坏一致性。 并发控制的主要目标是确保数据库系统在多事务环境下的正常运行。它面临的核心任务包括对并发操作的正确调度,以避免或解决诸如死锁和活锁等问题。死锁是指两个或多个事务因争夺资源而相互等待对方释放资源,导致所有事务都无法继续执行的状态。预防死锁的方法有两类:一是预防性策略,通过在事务开始时进行一定的检查和预防措施,如预设锁的顺序和数量限制,来防止死锁的发生;二是检测并解除死锁,一旦检测到死锁,系统会采取回滚部分事务或调整事务执行顺序来恢复系统的正常状态。 11.2节中的"封锁"是一种常用的并发控制技术,它通过锁定数据来确保在任一时刻只有一个事务可以访问特定数据,从而避免数据冲突。封锁的粒度(例如行级或事务级)会影响并发性能和系统的复杂性。选择合适的封锁级别是并发控制的一个关键决策。 11.3节提到的活锁和死锁是并发控制中的两个概念。活锁是指事务在等待资源时,虽然没有达到死锁条件,但长时间占用资源,使得其他事务无法继续,造成系统资源的浪费。活锁通常通过检测和解除来解决。死锁的处理更为复杂,需要实时监控事务间的资源请求链,一旦发现死锁,通过撤销部分事务或重新调度事务来打破循环等待。 11.4中提及的"并发调度的可串行性"是指系统通过某种方式保证所有的事务执行可以转换为一个串行化的执行序列,这样就可以避免并发冲突。这涉及到事务的调度算法,如先来先服务(FCFS)、最短剩余时间优先(SRTF)等。 11.5节的"两段锁协议"是一种常见的并发控制策略,它将事务划分为两个阶段,获取阶段和提交阶段。在获取阶段,事务申请锁,而在提交阶段,事务检查是否存在死锁,并根据需要释放已经持有的锁。这种方法确保了事务的原子性和一致性。 总结来说,解决数据库系统中的死锁问题涉及预防、检测和处理策略,以及并发控制机制中的各种技术和协议,如封锁、活锁处理和可串行化调度。理解这些概念和技术对于设计和优化多用户并发数据库系统至关重要。