【数据库原理】(26)数据库并发控制

这篇具有很好参考价值的文章主要介绍了【数据库原理】(26)数据库并发控制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

并发控制是数据库管理系统(DBMS)的核心功能之一。它确保在多个用户并行访问数据库时,数据库的一致性和完整性得到维护。

一.事务概述

1. 事务的定义

事务是数据库中基本的逻辑工作单位,由一系列操作组成,这些操作要么全部执行(提交),要么完全不执行(回滚)。一个事务可以是单个SQL语句、一组SQL语句或一整个程序段。

  • 事务的标记:通常使用SQL语句 BEGIN TRANSACTION 开始事务,用 COMMITROLLBACK 结束。
  • 提交(COMMIT):表示事务的所有操作都被确认,其对数据库的更改被永久保存。
  • 回滚(ROLLBACK):表示事务在执行过程中遇到问题,其所有操作被撤销,数据库回到事务开始前的状态。

2. 事务的特性(ACID)

事务的四大特性(ACID)保证了数据的一致性和系统的可恢复性。

  • 原子性(Atomicity):事务作为一个整体被执行,即全部完成或全部不执行。
  • 一致性(Consistency):事务确保数据库从一个一致的状态转换到另一个一致的状态。
  • 隔离性(Isolation):多个事务并发执行时,互不干扰,保证各事务的独立性。
  • 持久性(Durability):一旦事务提交,其结果在数据库中永久保存。

并发控制机制确保多个事务同时执行时,数据库的完整性不受影响。它模拟了事务的串行执行,即使实际上它们可能是并发运行的。这种机制是数据库管理系统性能的重要指标之一。

二.并发控制概述

并发控制是数据库管理系统(DBMS)中确保多用户环境下数据一致性和完整性的关键机制。这一机制主要是为了避免数据的丢失修改、读脏数据和不可重复读等问题,从而保障数据的准确性和一致性。

1. 并发操作可能产生的问题

在并发环境下,多个用户可能同时对同一数据进行操作,这可能导致以下几种问题:

  • 丢失修改(Lost Update):当一个事务读取数据后,另一个事务修改了这些数据,第一个事务再次读取时可能会得到不一致的结果。
  • 脏读(Dirty Read):当一个事务读取了另一个事务未提交的数据,如果后者回滚,前者读取的数据将成为无效数据。
  • 不可重复读(Non-Repeatable Read):一个事务在读取某些数据后,另一个事务对这些数据进行了修改,导致原事务无法再次读取到相同的数据。

例如,在银行账户的场景中,当两个分支机构同时对同一账户进行操作时,没有适当的并发控制可能会导致数据不一致,例如丢失修改。

2. 并发操作的调度

如果一个事物执行时,不允许其他事物并发操作,即把事务串行执行,则不会发生数据不一致的问题。正确的并发控制策略需要确保所有事务的并行执行结果与这些事务串行执行的结果相同。这种称为可串行化(serializability)的调度是许多DBMS采用的并发控制标准。

可串行化调度确保了即使在并行操作的环境下,也能保持数据的一致性和完整性。常见的并发控制技术包括锁定机制和乐观并发控制等。

三.封锁

封锁机制是数据库管理系统(DBMS)中实现并发控制的主要方式。它允许事务对其所操作的数据对象进行控制,分为三个步骤:申请加锁、获得锁以及释放锁。

1. 封锁类型

  • 排他锁(Exclusive Lock, X锁):通常用于修改数据,其他事务不能在该数据对象上加任何锁。它是独占性的,阻止其他事务读取或修改加锁数据。
  • 共享锁(Share Lock, S锁):用于读取操作,允许其他事务对同一数据对象加S锁,但不允许加X锁。这种锁是非独占的,允许多个事务读取同一数据。

2. 封锁粒度

封锁粒度指的是封锁对象的大小。封锁对象可以是数据库的一部分(如单个记录或数据页)或整个数据库。封锁粒度的选择影响系统的并发度和开销。较大的封锁粒度减少了并发度,但同时减少了系统的开销;而较小的封锁粒度则相反。

3. 封锁协议

封锁协议是关于何时加锁、锁的持续时间、何时释放锁的一套规则。

  • 保证数据一致性的三级封锁协议

    • 一级封锁协议:要求事务在修改数据前加X锁,直到事务结束才释放,防止丢失修改。
    • 二级封锁协议:在一级协议基础上,要求读取数据前加S锁,读完后即可释放,防止脏读。
    • 三级封锁协议:在一级协议基础上,要求读取数据前加S锁,直到事务结束才释放,防止不可重复读。
  • 两段锁协议(Two-phase Locking, 2PL):用于保证并行调度的可串行性。它规定事务在读写操作前必须获得锁,并且在释放任何锁之后不再获得新锁。这个协议分为“加锁阶段”和“解锁阶段”。

四.活锁与死锁

活锁和死锁都是数据库管理系统(DBMS)在并发控制时可能遇到的问题。理解它们的概念、成因和解决策略对于维护数据库系统的稳定性和效率至关重要。

1. 活锁(Livelock)

定义

  • 活锁发生在多个事务反复无果地争夺资源时,这些事务在尝试获取资源的过程中不断被阻塞,但没有进入死锁状态。

例子

  • 假设事务 T2 在等待数据对象 R,但每次 R 被释放时,其他新的事务(例如 T3、T4)总是先于 T2 获取到 R,导致 T2 一直无法执行。

解决方案

  • 采用先来先服务(First-Come, First-Served, FCFS)策略,确保事务按照申请资源的顺序获得资源。

2. 死锁(Deadlock)

定义

  • 死锁是指两个或多个事务在等待对方释放资源,从而导致它们都无法继续执行的状态。

例子

  • 事务 T1 封锁了数据对象 R1,而事务 T2 封锁了 R2。随后,T1 尝试封锁 R2,而 T2 尝试封锁 R1,导致两个事务互相等待,无法前进。

解决策略:

死锁的预防方法

  1. 一次封锁法

    • 要求事务在开始时一次性获取其需要的所有资源。
    • 缺点:可能导致资源的低效使用和并发度降低。
  2. 顺序封锁法文章来源地址https://www.toymoban.com/news/detail-799453.html

    • 根据预定义的顺序获取资源。
    • 缺点:难以适应数据和事务动态变化的环境。

死锁的诊断与解除

  • 诊断:通过事务等待图来检测死锁的存在。如果图中出现循环等待,表明发生了死锁。
  • 解除:选择牺牲最小的事务进行回滚,以解除死锁并释放资源。

到了这里,关于【数据库原理】(26)数据库并发控制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据库第十章(数据库恢复技术)十一章(并发控制)

    目录 1.事务 2.并发控制 1.事务 事务的特点:ACID 原子性   atom 一致性   consistent 隔离性   isolation 持久性   durable 故障的种类 1.事务内部故障         措施:采取redo重做和undo撤销技术 2.系统故障DBMS         措施:重启 3.介质故障         硬件损坏 4.计算机病毒   数据恢

    2024年02月09日
    浏览(59)
  • 2023-08-28 数据库-并发控制-初步思考

    此前做查询优化和查询执行比较多, 一般是在一个单独的事务内考虑优化查询. 最近在做并发控制方面的事情, 一些此前考虑的较少的方面需要做更为深入的思考. 并发控制和事务的特性息息相关, 直白的说就是事务的隔离性, 但是这么理解过于肤浅, 本文做一些初步的思考. 一个

    2024年02月11日
    浏览(43)
  • 数据库总复习第十一章 并发控制

    事务是并发控制的基本单位 并发操作带来的数据不一致性 R(x):读数据x W(x):写数据x 丢失修改 T2的提交结果破坏了T1的提交结果,导致T1的修改被丢失 不可重复读 T1读取某一数据,T2对其做了修改,当事务T1再次读该数据,得到与前一次不同的值 T1读取某些数据,T2删除其中部

    2024年01月17日
    浏览(61)
  • java进行数据库操作的并发控制的2种方法

    本文分享自华为云社区《java进行数据库操作的并发控制》,作者:张俭。 在现代应用编码中,从数据库里面find出来,进行一些业务逻辑操作,最后再save回去。即: 但是这样的业务操作,如果一个线程修改年龄,另一个线程修改昵称,最后save回去,可能会导致年龄/昵称某一

    2024年02月04日
    浏览(42)
  • 深入解析MVCC:多版本并发控制的数据库之道

    目录 引言 一、什么是MVCC? 二、MVCC的实现原理 2.1版本号 2.1.1版本号的作用: 2.1.2版本号的组成: 2.1.3.示例 2.2事务id 2.2.1事务ID的作用: 2.2.2事务ID的生成: 2.2.3示例: 2.3 快照(Snapshot) 2.3.1快照的作用: 2.3.2快照的实现方式: 2.3.3示例: 2.4版本链(Version Chain) 2.4.1版本链

    2024年01月24日
    浏览(65)
  • 系统架构设计师---事务管理、并发控制、数据库的备份与恢复

    目录 事务管理       定义       事务的四个特性(ACID)     相关SQL语句 并发控制     并发操作     封锁  数据库的备份与恢复      备份(转储)与恢复        备份分类       数据库的四类故障          DBMS 运行的基本工作单位是事务,事务是用户定义的一个数据库

    2024年02月12日
    浏览(57)
  • 【数据库】基于时间戳的并发访问控制,乐观模式,时间戳替代形式及存在的问题,与封锁模式的对比

    ​ 专栏内容 : 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏会定期更新,对应的代码也会定期更新,每个阶段的代码会打上tag,方便阶段学

    2024年02月03日
    浏览(49)
  • Redis 原理缓存过期、一致性hash、雪崩、穿透、并发、布隆、缓存更新策略、缓存数据库一致性

    redis的过期策略可以通过配置文件进行配置 redis会把设置了过期时间的key放在单独的字典中,定时遍历来删除到期的key。 1).每100ms从过期字典中 随机挑选20个,把其中过期的key删除; 2).如果过期的key占比超过1/4,重复步骤1 为了保证不会循环过度,导致卡顿,扫描时间上限

    2024年02月08日
    浏览(58)
  • MariaDB数据库服务器

    目录 一、什么是数据库? 二、什么是关系型数据库? 三、数据库字符集和排序规则是什么? 四、常用数据类型 五、Mariadb数据库相关配置案例 一、什么是数据库? 数据库(DB)是以一定方式长期存储在计算机硬盘内,能与多个用户共享,具有尽可能小的冗余度、与应用程序

    2024年02月10日
    浏览(40)
  • 【MySQL数据库】--- 初识数据库以及MySQL数据库在Linux云服务器下载(详细教程)

    🍎 博客主页:🌙@披星戴月的贾维斯 🍎 欢迎关注:👍点赞🍃收藏🔥留言 🍇系列专栏:🌙 MYSQL数据库 🌙请不要相信胜利就像山坡上的蒲公英一样唾手可得,但是请相信,世界上总有一些美好值得我们全力以赴,哪怕粉身碎骨!🌙 🍉一起加油,去追寻、去成为更好的自

    2024年02月03日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包