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

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



