浅聊MySQL中的LBCC和MVCC

devtools/2025/1/15 22:47:52/

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/devtools/150394.html

相关文章

.NET Core NPOI 导出图片到Excel指定单元格并自适应宽度

NPOI:支持xlsx,.xls,版本>2.5.3 XLS:HSSFWorkbook,主要前缀HSS, XLSX:XSSFWorkbook,主要前缀XSS,using NPOI.XSSF.UserModel; 1、导出Excel添加图片效果&#xff0…

极狐GitLab 正式发布安全版本17.7.1、17.6.3、17.5.5

本分分享极狐GitLab 补丁版本 17.7.1, 17.6.3, 17.5.5 的详细内容。这几个版本包含重要的缺陷和安全修复代码,我们强烈建议所有私有化部署用户应该立即升级到上述的某一个版本。对于极狐GitLab SaaS,技术团队已经进行了升级,无需用户采取任何…

性能测试工具Jmeter负载模拟

目录 场景设置 线性属性 补充知识:java线程一般有以下5种状态 场景运行 1.GUI运行测试 2.非GUI运行测试 在Jmeter测试计划中可以实现场景,负载,监听的功能。场景是用来尽量模拟用户的真实操作的工作单元,Jmeter场景主要通过…

Filebeat es

es kibana 内网地址 127.0.0.1:9200 https://vpcep-7c16b185-4d03-475c-bf9b-c38cde8d02c0.test.huaweicloud.com:9200 账户 admin 密码 admin #端口 9200 eskibana https://127.0.0.1:5601/app/login?nextUrl%2F 账户 admin 密码 admin docker 构建容器启动 docker syste…

自动化机械臂视觉跟踪和手眼校准

本文重点介绍了一款专为机器人教育而设计的具有动态跟踪功能的创客友好型机械臂 硬件组件 M5Stack ESP32 Basic Core IoT Development Kit Raspberry Pi 4 Model B Espressif ESP32S Elephant Robotics myCobot 320 m5 引言 今天文章的重点是使用myCobot 320机械臂重新创…

【samba】主机名访问ubuntu的samba文件夹

197机器是双系统的。之前在ubuntu(k8s-master-pfsrv)上创建了perfwork的samba共享文件夹现在同一个ip地址197 的windows系统也有共享文件夹。这些我从65的win机器访问 ubuntu系统共享文件夹,ubuntu 都不管用了。难道是win的配置后,之前的ubuntu的就重复了?之前直接用ip地址…

Qwen2ForSequenceClassification文本分类实战和经验分享

本文主要使用Qwen2ForSequenceClassification实现文本分类任务。 文章首发于我的知乎:https://zhuanlan.zhihu.com/p/17468021019 一、实验结果和结论 这几个月,在大模型分类场景做了很多实验,攒了一点小小经验。 1、短文本 1)query情感分类&…

Perl语言的软件开发工具

Perl语言的软件开发工具概述 引言 在软件开发的世界里,选择合适的编程语言和开发工具是成功的关键之一。Perl语言,作为一种功能强大的脚本语言,在数据处理、文本分析、系统管理和Web开发等多个领域中发挥着重要作用。在众多程序设计语言中&…