浅聊MySQL中的LBCC和MVCC

news/2025/1/13 12:51:49/

MySQL中的LBCC(Lock-Based Concurrency Control,基于锁的并发控制)和MVCC(Multi-Version Concurrency Control,多版本并发控制)是两种不同的并发控制机制,它们在实现方式、作用以及应用场景上存在显著的区别。

一、LBCC(基于锁的并发控制)

  1. 实现方式

    • LBCC主要通过锁机制来控制并发访问,包括行锁、表锁、间隙锁和临键锁等。
    • 行锁:锁定单个行记录,防止其他事务对此行进行update和delete等修改操作。
    • 表锁:锁定整个表,阻止其他事务对表的读写操作。
    • 间隙锁:锁定记录之间的间隙,防止其他事务在锁定的间隙中插入新记录。
    • 临键锁:是记录锁和间隙锁的组合,不仅锁定了记录本身,还锁定了记录和前一条记录之间的间隙。
  2. 作用

    • 保证数据的一致性和隔离性。
    • 通过锁机制防止并发事务之间的冲突。
  3. 举例说明

    • 假设有一个名为sys_user的表,事务A执行SELECT * FROM sys_user WHERE id = 1 FOR UPDATE;语句,此时会对id为1的行记录加上行锁,防止事务B对同一行记录进行修改。
    • 如果事务B尝试执行UPDATE sys_user SET name = 'new_name' WHERE id = 1;语句,由于事务A已经对id为1的行记录加了锁,因此事务B会被阻塞,直到事务A提交或回滚后释放锁。

二、MVCC(多版本并发控制)

  1. 实现方式

    • MVCC通过为每个数据行维护多个版本来实现并发控制。
    • 每个版本都有一个特定的事务ID或时间戳,表示该版本是由哪个事务在何时创建的。
    • 当一个事务读取数据时,会根据版本号或时间戳选择一个可见的版本。
  2. 作用

    • 提高数据库的并发性能。
    • 允许多个事务并发执行而不互相干扰。
    • 通过版本控制避免行级锁的竞争,减少传统锁机制下的阻塞和性能瓶颈。
  3. 举例说明

    • 假设有一个名为user的表,事务A和事务B同时读取id为1的用户数据。
    • 事务A读取时,获取到的是id为1的用户数据的某个版本,此时事务B也对id为1的用户数据进行读取。
    • 如果事务B在读取之前,事务A对该数据进行了修改并提交,由于MVCC的存在,事务B读取到的仍然是修改前的版本,即事务开始时的数据快照。
    • 这样,即使事务A和事务B同时读取和修改同一行数据,也不会互相干扰,因为每个事务都看到的是自己事务开始时的数据快照。

三、区别与对比

  1. 并发控制方式

    • LBCC:通过锁机制来控制并发访问,包括行锁、表锁、间隙锁和临键锁等。
    • MVCC:通过为每个数据行维护多个版本来实现并发控制,每个版本都有一个特定的事务ID或时间戳。
  2. 性能

    • LBCC:在并发访问量较大时,锁机制可能会导致性能瓶颈和阻塞。
    • MVCC:通过版本控制避免了行级锁的竞争,显著提高了并发性能。
  3. 数据一致性

    • LBCC:通过锁机制保证数据的一致性和隔离性。
    • MVCC:通过版本控制和撤销日志来实现并发控制,确保数据的一致性。但需要注意定期清理旧版本以释放存储空间。
  4. 应用场景

    • LBCC:适用于需要严格保证数据一致性和隔离性的场景。
    • MVCC:适用于并发访问量较大、读操作较多的场景。

综上所述,LBCC和MVCC是MySQL中两种不同的并发控制机制,它们在实现方式、作用以及应用场景上存在显著的区别。在实际应用中,可以根据具体的需求和场景选择合适的并发控制机制。

(望各位潘安、各位子健多多指正!希望您不吝赐教!🙏)


http://www.ppmy.cn/news/1562809.html

相关文章

MySQL教程之:获取有关数据库和表的信息

如果您忘记了数据库或表的名称,或者给定表的结构是什么(例如,它的列叫什么)怎么办?MySQL通过几个语句来解决这个问题,这些语句提供了有关它支持的数据库和表的信息。 您之前看过SHOW DATABASES&#xff0c…

隐私计算,构建安全的未来数据空间

大数据产业创新服务媒体 ——聚焦数据 改变商业 在医疗领域,不同医院之间需要共享患者数据,以提供更全面准确的诊断和治疗方案。 传统的数据处理方式通常是数据经过转换隐藏重要数据后再进行分析,虽然可以保护数据隐私,但在数据源…

Guilite字库工具

目录 前言 使用方法 离线字库解析 工具链接 前言 最近通过Qt写了一个Guilite字库工具,相比原始工具,主要有以下几个优点: (1)支持同时生成多套字库 (2)支持离线字库生成 (3&a…

Hive SQL必刷练习题:连续问题 间断连续

问题描述: 1) 连续问题:找出连续三天(或者连续几天的啥啥啥)。 2) 间断连续:统计各用户连续登录最长天数,间断一天也算连续,比如1、3、4、6也算登陆了6天 问题分析&am…

(长期更新)《零基础入门 ArcGIS(ArcScene) 》实验七----城市三维建模与分析(超超超详细!!!)

城市三维建模与分析 三维城市模型已经成为一种非常普遍的地理空间数据资源,成为城市的必需品,对城市能化管理至关重要。语义信息丰富的三维城市模型可以有效实现不同领域数据与IS相信息的高层次集成及互操作,从而在城市规划、环境模拟、应急响应和辅助决策等众多领域公挥作用、…

使用Cilium/eBPF实现大规模云原生网络和安全

大家读完觉得有帮助记得关注和点赞!!! 目录 抽象 1 Trip.com 云基础设施 1.1 分层架构 1.2 更多细节 2 纤毛在 Trip.com 2.1 推出时间表 2.2 自定义 2.3 优化和调整 2.3.1 解耦安装 2.3.2 避免重试/重启风暴 2.3.3 稳定性优先 2…

CentOS 7.9 通过 yum 安装 Docker

文章目录 前言一、删除已安装的 Docker二、网络设置三、设置 yum 源,并安装依赖四、设置 Docker 仓库五、安装及使用 Docker六、镜像仓库总结 前言 CentOS 7.9 过了维护期,Docker 官方文档没有了相关的安装文档。记录一下,备用! …

30天开发操作系统 第 12 天 -- 定时器 v1.0

前言 定时器(Timer)对于操作系统非常重要。它在原理上却很简单,只是每隔一段时间(比如0.01秒)就发送一个中断信号给CPU。幸亏有了定时器,CPU才不用辛苦地去计量时间。……如果没有定时器会怎么样呢?让我们想象一下吧。 假如CPU看不到定时器而仍想计量时…