当前位置: 首页 > news >正文

【数据库系统】数据库系统概论——第十一章 并发控制

第十一章 并发控制

文章目录

  • 第十一章 并发控制
  • 前言
  • 11.1并发控制概述
  • 11.2封锁
  • 11.3封锁协议
  • 11.4活锁和死锁
    • 11.4.1活锁
    • 11.4.2死锁
  • 11.5并发调度的可串行性
    • 11.5.1可串行化调度
    • 11.5.2冲突可串行化调度
  • 11.6两段锁协议
  • 11.7封锁的粒度
    • 11.7.1多粒度封锁
    • 11.7.2意向锁
  • 11.8其他并发控制机制
    • 11.8.1多版本并发控制
    • 11.8.2改进的多版本并发控制
  • 11.9小结

前言

多用户数据库系统是指允许多个用户同时使用的数据库系统。其特点是在同一时刻并发运行的事务数可达数百上千个,多用户数据库系统涉及并行控制。
多事务执行方式
(1)事务串行执行
每个时刻只有一个事务运行,其他事务必须等到这个事务结束以后方能运行,不能充分利用系统资源,发挥数据库共享资源的特点。执行方式如下图:

(2)交叉并发方式
在单处理机系统中,事务的并行执行是这些并行事务的并行操作轮流交叉运行,单处理机系统中的并行事务并没有真正地并行运行,但能够减少处理机的空闲时间,提高系统的效率。执行方式如下图:

(3)同时并发方式
多处理机系统中,每个处理机可以运行一个事务,多个处理机可以同时运行多个事务,实现多个事务真正的并行运行。
本章数据库系统并发控制技术是以单处理机系统为基础的。

11.1并发控制概述

事务是并发控制的基本单位,并发控制机制的任务是:
①对并发操作进行正确调度。
②保证事务的隔离性。
③保证数据库的一致性。
并发操作带来数据的不一致性实例。
例:飞机订票系统中的一个活动序列。
①甲售票点(事务T1)读出某航班的机票余额A,设A=16;
②乙售票点(事务T2)读出同一航班的机票余额A,也为16;
③甲售票点卖出一张机票,修改余额A←A-1,所以A为15,把A写回数据库;
④乙售票点也卖出一张机票,修改余额A←A-1,所以A为15,把A写回数据库。
结果明明卖出两张机票,数据库中机票余额只减少1。
说明:
①以上情况称为数据库的不一致性,是由并发操作引起的。在并发操作情况下,岁T1,T2两个事务的操作序列的调度是随机的。
若按上面的调度序列执行,T1事务的修改就被丢失。因为第4步中T2事务修改A并写回后覆盖了T1事务的修改。
②并发操作带来的数据不一致性包括丢失修改、不可重复读、读“脏”数据。
③用记号R(x)表示读数据X,W(x)表示写数据X。

  1. 丢失修改
    两个事务T1和T2读入同一数据并修改,T2的提交结果破坏了T1提交的结果,导致T1的修改被丢失。上面飞机订票的例子就属此类。
  2. 不可重复读
    不可重复读是指事务T1读取数据后,事务T2执行更新操作,使T1无法再现一次读取结果。
    不可重复读包括三种情况:
    (1)事务T1读取某一数据后,事务T2对其做了修改,当事务T1再次读该数据时,得到与前一次不同的值。
    T1读取B=100进行运算。
    T2读取同一数据B,对其进行修改后将B=200写回数据库。
    T1为了对读取值校对重读B,B为200,与第一次读取值不一致。

    (2)事务T1按一定条件从数据库中读取了某些数据记录后,事务T2删除了其中部分记录,当T1再次按相同条件读取数据时,发现某些记录神秘地消失了。
    (3)事务T1按一定条件从数据库中读取某些数据记录后,事务T2插入了一些记录,当T1再次按相同条件读取数据时,发现多了一些记录。
    后两种不可重复读有时也称为幻影现象。
  3. 读“脏”数据
    读“脏”数据是指读到不正确的数据。
    例:
    (1)事务T1修改某一数据,并将其写回磁盘。
    (2)事务T2读取同一数据后,T1由于某种原因被撤销。
    (3)这时T1已修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致。
    (4)T2读到的数据就为“脏”数据,即不正确的数据。
    T1将C值修改为200,T2读到C为200.
    T1由于某种原因撤销,其修改作废,C恢复原值100.
    这时T2读到C为200,与数据库内容不一致,就是“脏“数据。

    上面三种珊瑚橘不一致的情况主要是因为并发操作破坏了事务的隔离性。
    并发控制就是要用正确的方式调度并发操作,使一个用户事务的执行不受其他事务的干扰,从而避免造成数据的不一致性。对数据库的应用有时允许某些不一致性。
    并发控制的主要技术:封锁、时间戳、乐观控制法、多版本并发控制。

11.2封锁

  1. 什么是封锁
    封锁就是事务T在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象。
    封锁是实现并发控制的一个非常重要的技术。
  2. 基本封锁类型
    一个事务对某个数据对象加锁后究竟拥有什么样的控制由封锁的类型决定。
    基本封锁类型:排它锁(简记为X锁)、共享锁(简记为S锁)。
    (1)排它锁
    排它锁又称为写锁,若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁,保证其他事务在T释放A上的锁之前不能再读取和修改A。
    (2)共享锁
    共享锁又称为读锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其它事务只能再对A加锁,而不能加X锁,直到T释放A上的锁。保证其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。
    锁的相容矩阵

    Y=Yes,相容的请求;N=No,不相容的请求
    说明:
    在锁的相容
http://www.jsqmd.com/news/618220/

相关文章:

  • Kafka管理工具新选择:如何用Kafka-King实现可视化消息队列监控?
  • Rusted PackFile Manager:从零开始打造你的Total War模组
  • BepInEx实战指南:一站式掌握Unity游戏插件注入框架
  • AI开发-python-langchain框架(--AI 直接生成并执行 Python 代码 )茨
  • 聊聊蓝莓滴灌配件厂家直销服务,大理哪家专业靠谱 - 工业品牌热点
  • AD25 — 关闭实时DRC
  • 【病变检测】基于CNN实现视网膜影像检测糖尿病视网膜病变附Matlab代码
  • EF Core 10向量搜索扩展源码精读(含完整调用链图谱+IL截取+SQL生成时序图,限首批读者获取)
  • Android设备标识技术重构:开源OAID解决方案的技术演进与实践价值
  • 如何轻松备份微信聊天记录:WeChatMsg完整数据导出指南
  • C语言完美演绎7-9
  • FastVideo 未来展望:下一代视频生成技术路线图分析
  • 如何快速掌握网页时光机:新手终极指南
  • HTML转Figma:打破设计与开发边界的下一代工具
  • 水下无人机PID调参实战:用QGroundControl地面站搞定ArduSub的‘点头’和‘漂移’
  • 从Ping命令到网卡:用Wireshark抓包深度解析LwIP 2.1.0的数据发送链路
  • Axure RP 中文汉化终极指南:3分钟实现专业设计软件本地化
  • SBTI 和 SBTI Skill 完全指南:Claude 驱动的超大型人格测试
  • Wayback Machine 浏览器扩展:你的互联网时光穿梭指南
  • 如何三步永久免费使用Cursor Pro?这款AI编程助手破解工具让你告别试用限制
  • 3步构建高效AI代码修复评估系统:SWE-bench实战指南
  • 太阳能电池缺陷检测:为什么这个2624张EL图像数据集正在改变AI质检格局?
  • EF Core 10向量搜索扩展源码全栈拆解:从Span<T>内存优化到ANN索引桥接层的5大核心实现细节
  • 终极Obsidian样式定制指南:5分钟打造个性化知识管理界面
  • 优化高负载详情接口:基于字段选择与懒加载的实践
  • Qwen1.5-1.8B GPTQ环境配置避坑指南:解决各类安装包依赖冲突
  • 【监管合规倒计时】:Basel III新标下R语言VaR实时计算达标路径——3类不可绕过的数值稳定性校验清单
  • 避坑指南:Qt动态布局中控件重叠的5种常见原因及对应解决方案(QHBoxLayout/QVBoxLayout)
  • Arduino MQTT客户端终极指南:三步快速实现物联网设备通信
  • 华硕笔记本性能优化终极指南:GHelper轻量级控制工具完全教程