数据库事务中的锁、两阶段提交与死锁管理
1. 数据库事务的乐观与悲观策略
为了实现并发访问,数据库管理系统(DBMS)必须能够避免或解决用户(包括人员、程序或终端)可能产生的冲突。并发控制主要有两种方法:悲观并发控制和乐观并发控制。
悲观并发控制是分布式数据库环境中传统采用的技术。它基于两个假设:一是除非采取措施预防,否则冲突必然会发生;二是通过请求系统对信息元素(IE)进行锁定或预留,可防止冲突。当一个信息元素被成功锁定后,在该对象被释放之前,其他用户无法以可能导致冲突的方式使用它。若无法获得请求的锁,则意味着另一个事务已预留了该信息元素,通常会使请求事务等待,直至对象被释放。
乐观并发控制则与之相反。它假定冲突不会发生,尽可能推迟冲突检测。对数据副本进行修改,并记录潜在冲突。当请求提交事务时,DBMS 会检查是否发生了冲突。若没有冲突,事务中的修改将永久保存,提交成功;若发生冲突,提交失败,事务必须基于数据库的新状态重新执行。
无论采用哪种策略,并发控制的目标都是尽量减少应用程序等待有效信息元素或基于无效信息元素重复操作所花费的时间。决定悲观或乐观并发控制哪种更高效的因素包括:
- 事务类型:一些专家认为,只读事务在乐观控制方案下很少失败,但在悲观方案下可能会被锁定。不过,只读事务是最简单的类型,Kung 和 Robinson 的乐观调度协议以及某些时间戳算法可能会中止只读事务。
- 事务长度:复杂事务比只读事务耗时长得多,事务执行时间越长,发生并发冲突的概率就越高。同时,由于正在进行的操作导致数据被锁定的时间越长,其他需要该信息元素的事务等待的概率也越高。
- 执行环境的复杂性:当前的事务需求在复杂性方面有了更高的要求,数据
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



