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

行锁(Row Locking)和MVCC(多版本并发控制)

在数据库系统中,**行锁(Row Locking)MVCC(多版本并发控制)**是两种不同的并发控制机制,它们的使用场景和原理有显著区别。以下是详细对比和适用场景分析:


一、行锁(Row Locking)

1. 核心原理
  • 阻塞式并发控制:通过加锁(共享锁、排他锁)直接阻止其他事务访问被锁定的数据。
  • 锁粒度:锁定单行或多行数据(如 SELECT ... FOR UPDATE)。
2. 典型使用场景
场景说明示例
高竞争写操作多个事务同时修改同一行数据电商库存扣减:
UPDATE products SET stock=stock-1 WHERE id=100
显式锁定读取需要确保后续操作基于最新数据银行转账前锁定账户:
SELECT balance FROM accounts WHERE id=1 FOR UPDATE
避免丢失更新防止两个事务覆盖彼此的修改并发更新用户积分:
事务A和B同时执行 UPDATE users SET points=points+10 WHERE id=5
悲观并发控制默认认为冲突会发生,提前加锁传统OLTP系统(如早期MySQL InnoDB默认模式)
3. 优缺点
  • 优点:保证强一致性,避免脏写和丢失更新。
  • 缺点:可能引发锁等待甚至死锁,降低并发性能。

二、MVCC(Multi-Version Concurrency Control)

1. 核心原理
  • 非阻塞式并发控制:每个事务看到的是数据在某个时间点的快照(通过版本链实现)。
  • 读不阻塞写,写不阻塞读:读写操作不会相互阻塞(但写-写仍需锁)。
2. 典型使用场景
场景说明示例
高并发读操作读多写少的系统(如论坛、CMS)查询文章内容:
SELECT * FROM articles WHERE id=123(无锁)
长事务查询需要一致性视图,避免被其他事务干扰生成报表时保持数据一致性
降低锁冲突避免读操作阻塞写操作用户浏览商品详情页时,后台仍可更新库存
乐观并发控制默认认为冲突较少,提交时检查版本分布式系统(如PostgreSQL、MySQL InnoDB的默认读已提交/可重复读隔离级别)
3. 优缺点
  • 优点:大幅提升读并发性能,避免读-写阻塞。
  • 缺点:需要维护版本链,存储开销较大;写冲突需在提交时检测(可能引发回滚)。

三、行锁 vs MVCC 对比总结

特性行锁MVCC
并发控制方式悲观锁(先加锁)乐观锁(版本检查)
读写关系读-写、写-写互斥读-写不互斥(写-写仍需锁)
一致性视图实时最新数据事务开始时或语句开始时的快照
适用场景高竞争写操作高并发读操作
典型数据库MySQL InnoDB(显式锁时)PostgreSQL、MySQL InnoDB(默认)、Oracle

四、混合使用场景

现代数据库(如MySQL InnoDB)通常结合两者

  1. MVCC处理读操作:普通SELECT使用快照读(无锁)。
  2. 行锁处理写操作UPDATE/DELETE默认加排他锁,SELECT ... FOR UPDATE加显式锁。
  3. 冲突处理
    • 写操作会检查数据的最新版本,若被其他事务修改则可能阻塞或回滚(取决于隔离级别)。

五、隔离级别的影响

隔离级别行锁使用MVCC使用
READ UNCOMMITTED写操作加锁无快照,读可能脏读
READ COMMITTED写操作加锁语句级快照
REPEATABLE READ写操作加锁事务级快照(MySQL默认)
SERIALIZABLE所有读操作加共享锁退化为类似行锁的严格串行

六、开发建议

  1. 优先让数据库自动管理
    • 大多数情况下,依赖数据库的默认机制(如InnoDB的MVCC+行锁)即可。
  2. 显式控制场景
    • 需要强一致性时手动加锁(FOR UPDATE)。
    • 读多写少时利用MVCC避免锁竞争。
  3. 监控与调优
    • 高并发系统需关注锁等待(SHOW ENGINE INNODB STATUS)和长事务(可能延长MVCC版本链)。

相关文章:

行锁(Row Locking)和MVCC(多版本并发控制)

在数据库系统中,**行锁(Row Locking)和MVCC(多版本并发控制)**是两种不同的并发控制机制,它们的使用场景和原理有显著区别。以下是详细对比和适用场景分析: 一、行锁(Row Locking&am…...

AlexNet神经网络详解及VGGNet模型和

AlexNet模型细节 一共8层,5个卷积层,3个全连接层 AlexNet工程技巧 多GPU训练,ReLU激活函数,LRN归一化,Dropout,重叠池化,数据增强等 多GPU训练 除了将模型的神经元进行了并行,还使…...

【Linux网络】Socket 编程TCP

🌈个人主页:秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343 🔥 系列专栏:https://blog.csdn.net/qinjh_/category_12891150.html 目录 TCP socket API 详解 socket(): bind(): listen(): accept(): connect V0…...

代码训练day27贪心算法p1

贪心的本质是选择每一阶段的局部最优,从而达到全局最优 贪心算法一般分为如下四步: 将问题分解为若干个子问题找出适合的贪心策略求解每一个子问题的最优解将局部最优解堆叠成全局最优解 1.分发饼干 先将饼干数组和小孩数组排序。 然后从后向前遍历…...

基于RV1126开发板的车辆检测算法开发

1. 车辆检测简介 车辆检测是一种基于深度学习的对人进行检测定位的目标检测,能广泛的用于园区管理、交通分析等多种场景,是违停识别、堵车识别、车流统计等多种算法的基石算法。 人脸检测算法mAP0.5CAR0.78029 基于EASY-EAI-Nano硬件主板的运行效率&…...

Leetcode——137 260找出只出现一次的数

文章目录 找出只出现一次的数引入Leetcode 260Leetcode 137 找出只出现一次的数 对于数组中有一类题,即某些数据在数组中只出现一遍,需要我们找出,今天我们来看看这个类型的题。 引入 想必大家应该见过这么一道题: 现给定一个数…...

【多线程-第四天-自己模拟SDWebImage的下载图片功能-看SDWebImage的Demo Objective-C语言】

一、我们打开之前我们写的异步下载网络图片的项目,把刚刚我们写好的分类拖进来 1.我们这个分类包含哪些文件: 1)HMDownloaderOperation类, 2)HMDownloaderOperationManager类, 3)NSString+Sandbox分类, 4)UIImageView+WebCache分类, 这四个文件吧,把它们拖过来…...

【5G学习】基本概念之多频资源以及子载波和信道

在5G通信中,子载波、信道以及时域、频域、码域、空域是构建无线传输系统的核心概念。它们共同定义了信号的传输方式、资源分配和多维复用技术。以下是详细解释及其相互关系: 一、核心概念定义 1. 子载波(Subcarrier) 定义&#…...

鸿蒙动画与交互设计:ArkUI 3D变换与手势事件详解

大家好,我是 V 哥。 在鸿蒙 NEXT 开发中,ArkUI 提供了丰富的 3D 变换和手势事件功能,可用于创建生动且交互性强的用户界面。下面详细介绍 ArkUI 的 3D 变换和手势事件,并给出相应的 ArkTS 案例代码。 1. ArkUI 3D 变换 ArkUI 支…...

敏感数据触发后怎么保障安全?

当敏感数据被触发或泄露时,需立即采取系统化措施控制风险。以下为分阶段应对策略,结合技术与管理手段: 一、即时响应阶段 阻断扩散 隔离受影响系统:立即断开网络连接、暂停服务或关闭相关端口。 终止可疑进程:通过华…...

【CVE-2024-10929】ARM CPU漏洞安全通告

安全之安全(security)博客目录导读 目录 一、概述 二、CVE详情 三、受影响产品 四、建议措施 五、致谢 六、版本历史 一、概述 在部分基于Arm架构的CPU中发现了一个潜在安全问题,称为Spectre-BSE(Branch Status Eviction,分支状态驱逐…...

高级java每日一道面试题-2025年4月06日-微服务篇[Nacos篇]-如何诊断和解决Nacos中的常见问题?

如果有遗漏,评论区告诉我进行补充 面试官: 如何诊断和解决Nacos中的常见问题? 我回答: 在Java高级面试中诊断和解决Nacos常见问题的综合回答 在Java高级面试中,当被问及如何诊断和解决Nacos中的常见问题时,可以从以下几个方面进行详细阐述…...

【模块化拆解与多视角信息3】教育背景:学历通胀时代的生存法则

教育背景:学历通胀时代的生存法则 写在最前 作为一个中古程序猿,我有很多自己想做的事情,比如埋头苦干手搓一个低代码数据库设计平台(目前只针对写java的朋友),比如很喜欢帮身边的朋友看看简历,讲讲面试技巧,毕竟工作这么多年,也做到过高管,有很多面人经历,意见还算…...

无人机3S与4S电池技术对比!

一、基础参数对比 1. 电芯与电压 3S电池:由3节锂电芯串联组成,标称电压为11.1V(单节3.7V3),满电电压约12.6V。 4S电池:由4节电芯串联,标称电压14.8V(3.7V4)&#…...

linux电源管理(二),内核的CPUFreq(DVFS)和ARM的SCPI

更多linux系统电源管理相关的内容请看:https://blog.csdn.net/u010936265/article/details/146436725?spm1011.2415.3001.5331 1 简介 CPUFreq子系统位于drivers/cpufreq目录下,负责进行运行过程中CPU频率和电压的动态调整,即DVFS (Dynami…...

短波红外高光谱相机:高光谱成像在塑料分选中的应用

随着塑料工业的迅猛发展,塑料包装制品需求量增长迅速,消耗量不断上升,废塑料产生量也急剧增加。由于塑料化学结构稳定,难以自然降解,不当使用和处置及累积会造成严重的环境污染和资源浪费。因此,快速、精准…...

通过OBD部署OceanBase社区版集群v4.3.5

以下内容结合OceanBase官方文档进行安装部署测试 官方文档地址:https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002016072 一.环境准备 准备三台虚拟机,配置信息如下 192.168.232.8 centos7.9 4c16g 硬盘100g 192.168.232.9 …...

【Java学习笔记】注释

注释 为什么要写注释? 养成良好的编程习惯,方便后续阅读和查看,理顺思路,增加可读性 对自己的代码负责,对别人负责 说明 1. 被注释的文字,不会被 JVM(虚拟机)解释执行 2. 多行注…...

Python 调用 YOLO ONNX

Python 调用 YOLO ONNX 1 下载ONNX文件2 Python代码 1 下载ONNX文件 ONNX下载地址 2 Python代码 import cv2 from ultralytics import YOLO# 加载 YOLOv11 model YOLO(./yolo11n.pt)# 读取图片 image_path ./11.png img cv2.imread(image_path)# 推理(可以传…...

Linux 下 Module 工具的介绍与使用

参考: https://www.fasteda.cn/post/22.html https://modules.readthedocs.io/en/latest/module.html Linux 下 Module 工具的介绍与使用 一、前言 在 Linux 中,当同一款编辑器、运行库、软件存在多个版本且多个版本都需要在不同的场景或人员使用时&a…...

批量归一化(Batch Normalization)原理与PyTorch实现

批量归一化(Batch Normalization)是加速深度神经网络训练的常用技术。本文通过Fashion-MNIST数据集,演示如何从零实现批量归一化,并对比PyTorch内置API的简洁实现方式。 1. 从零实现批量归一化 1.1 批量归一化函数实现 import t…...

Flutter 文本组件深度剖析:从基础到高级应用

引言 在 Flutter 应用开发中,文本是向用户传达信息的重要媒介。Flutter 提供了丰富且强大的文本组件和相关属性,使开发者能够轻松实现多样化的文本展示效果。无论是简单的静态文本显示,还是复杂的富文本渲染,Flutter 都能满足需求…...

FABC是什么?

在销售和品牌营销领域,FABC 是一种用于构建销售话术和营销信息的框架,其全称为 Features(特点)、Advantages(优势)、Benefits(利益)、Case(案例)。该模型帮助…...

【MySQL】MVCC工作原理、事务隔离机制、undo log回滚日志、间隙锁

一、什么是MVCC? MVCC,即 Multiversion Concurrency Control(多版本并发控制),它是数据库实现并发控制的一种方式。 MVCC 的核心思想是: 为每个事务提供数据的“快照”版本,从而避免加锁&…...

Spring Boot 集成 RocketMQ 全流程指南:从依赖引入到消息收发

前言 在分布式系统中,消息中间件是解耦服务、实现异步通信的核心组件。RocketMQ 作为阿里巴巴开源的高性能分布式消息中间件,凭借其高吞吐、低延迟、高可靠等特性,成为企业级应用的首选。而 Spring Boot 通过其“约定优于配置”的设计理念&a…...

PCL 点云RANSAC提取平面(非内置函数)

文章目录 一、算法实现1.1实现步骤二、实现代码三、实现效果参考资料一、算法实现 1.1实现步骤 1、确定模型。三个点确定一个平面,方程式为 a x + b y + c z + 1 = 0 ax+by+cz+1=0...

中介者模式:理论、实践与 Spring 源码解析

摘要 本论文以中介者模式为核心,系统阐述其设计原理、应用场景及在 Spring 框架中的实现机制。通过机票预订系统、银行交易系统等典型案例,具象化展示模式如何解耦复杂对象交互;结合 Spring 5.3.29 源码,深入剖析事件驱动模型中ApplicationEventPublisher与ApplicationLis…...

2025.04.14【Table】| 生信数据表图技巧

Custom title A set of examples showing how to customize the titles of a table made with GT Custom footer How to customize the footer and the references section of a gt table 文章目录 Custom titleCustom footer 生信数据可视化:Table图表详解1. R语…...

Unified Modeling Language,统一建模语言

UML(Unified Modeling Language,统一建模语言)是一种标准化的图形化建模语言,用于可视化、规范和文档化软件系统的设计。UML 提供了一套通用的符号和规则,帮助开发者、架构师和团队成员更好地理解和沟通软件系统的结构…...

OCP证书有效期是永久,但需要更新

在数据库管理领域,OCP证书作为Oracle认证体系中的重要组成部分,一直是数据库专业人士追求的目标。许多考证者会有疑惑:OCP证书是永久有效的吗?需要更新吗? Oracle官方明确规定:OCP证书一经获得,终身有效。无…...

服务器本地搭建

socket函数 它用于创建一个新的套接字&#xff08;socket&#xff09;。 函数原型 #include <sys/socket.h> int socket(int domain, int type, int protocol);参数解释 domain&#xff1a;它指定了通信所使用的协议族&#xff0c;常见的取值如下&#xff1a; AF_INET…...

调节磁盘和CPU的矛盾——InnoDB的Buffer Pool

缓存的重要性 无论是用于存储用户数据的索引【聚簇索引、二级索引】还是各种系统数据&#xff0c;都是以页的形式存放在表空间中【对一个/几个实际文件的抽象&#xff0c;存储在磁盘上】如果需要访问某页的数据&#xff0c;就会把完整的页数据加载到内存中【即使只访问页中的一…...

[dp12_回文子串] 最长回文子串 | 分割回文串 IV

目录 1.回文子串 题解 2.最长回文子串 题解 3.分割回文串 IV 题解 dp[i][j] 表示 s 字符串 [i, j] 的子串&#xff0c;是否是回文串( 建始末表&#xff09; 将两个 for 循环的结果&#xff0c;借助二维 dp 来存 1.回文子串 链接&#xff1a;647. 回文子串 给你一个字符…...

分布式应用架构的演变

整体演变过程 第一阶段&#xff1a;单一应用架构 单一应用架构&#xff0c;是把所有服务都放在一个项目中&#xff0c;进行打包部署到服务器上&#xff0c;如果流量特别大的话&#xff0c;就在另外的服务器上部署相同的功能模块用来分摊流量。但是这样的话&#xff0c;一旦有某…...

zephyr RTOS 中 bt_le_adv_start函数的功能应用

目录 概述 1 功能 1.1 功能介绍 1.2 函数原型 2 参数说明 2.1 广播参数&#xff08;bt_le_adv_param&#xff09; 2.2 常用广播选项&#xff08;options&#xff09; 2.3 广播数据&#xff08;bt_data&#xff09; 3 示例代码 3.1 启动可连接广播&#xff08;带设备名…...

双按键控制LED(中断优先级)

1.启动时&#xff0c;两个LED灯熄灭&#xff0c;1秒钟后&#xff08;定时器实现&#xff09;&#xff0c;LED自动点亮&#xff1b; 2.按键1按下后&#xff0c;通过中断int0把两个LED熄灭5s时间&#xff0c;int0优先级设置为最高&#xff08;优先级必须设置&#xff0c;设置后才…...

美团即时零售大动作,将独立的闪购将会改变什么?

4月12日上午&#xff0c;美团核心本地商业CEO王莆中在社交媒体上发文&#xff0c;宣布美团将在下周正式发布即时零售品牌&#xff0c;标志着美团将进一步发展即时零售业务。 首先&#xff0c;从市场格局角度来看&#xff0c;美团将独立的闪购品牌推出&#xff0c;会进一步加剧…...

如何安装git?

以下是 Windows、macOS 和 Linux 系统安装 Git 的详细步骤&#xff1a; 一、Windows 系统安装 Git 下载安装包 访问 Git 官网下载页&#xff0c;点击下载 Windows 版安装程序&#xff08;如 Git-2.45.1-64-bit.exe&#xff09;。 运行安装程序 安装选项&#xff1a; 选择安装路…...

Ubuntu上docker、docker-compose的安装

今天来实践下Ubuntu上面安装docker跟docker-compose&#xff0c;为后面安装dify、fastgpt做准备。 一、安装docker sudo apt-get updatesudo apt-get install docker.io 然后系统输入 docker --version 出现下图即为docker安装成功。 二、安装docker-compose 我先看下系统…...

ubuntu如何设置静态ip

服务器有时是通过dhcp动态获取ip的&#xff0c;有时出于远程登录方便的考虑&#xff0c;会将其设置为静态ip&#xff0c;以下是设置静态ip的方法 在 Ubuntu 中设置静态 IP 的方法取决于你使用的网络管理工具&#xff08;如 netplan、NetworkManager 或 ifconfig&#xff09;。…...

js原型和原型链

js原型&#xff1a; 1、原型诞生的目的是什么呢&#xff1f; js原型的产生是为了解决在js对象实例之间共享属性和方法&#xff0c;并把他们很好聚集在一起&#xff08;原型对象上&#xff09;。每个函数都会创建一个prototype属性&#xff0c;这个属性指向的就是原型对象。 …...

大数据 - 2. Hadoop - HDFS

前言 HDFS&#xff1a;分布式文件系统 为什么海量数据需要分布式存储技术&#xff1f; 文件过大时&#xff0c;单台服务器无法承担&#xff0c;要靠数量来解决。数量的提升带来的是网络传输、磁盘读写、CPU、内存等各方面的提升。 众多的服务器一起工作&#xff0c;如何保证…...

嵌入式硬件常用总线接口知识体系总结和对比

0.前言 在嵌入式工程实现中,多多少少我们都使用过总线,各种各样的总线应用于不同场合,不同场景有不同的优势,但是我们在作为工程师过程中在如何选择项目合适的总线,根据什么来选?需要我们对项目全局和总线特征有所了解,本文目的就是对比多种总线的关键特征 我们在聊到…...

prime 1 靶场笔记(渗透测试)

环境说明&#xff1a; 靶机prime1和kali都使用的是NAT模式&#xff0c;网段在192.168.144.0/24。 Download (Mirror): https://download.vulnhub.com/prime/Prime_Series_Level-1.rar 一.信息收集 1.主机探测&#xff1a; 使用nmap进行全面扫描扫描&#xff0c;找到目标地址及…...

(二十四)安卓开发中的AppCompatActivity详解

在安卓开发中&#xff0c;AppCompatActivity 是一个非常核心的类&#xff0c;它继承自 Activity&#xff0c;并通过 Android Support Library&#xff08;现已迁移至 AndroidX&#xff09;提供了对 ActionBar 和 Material Design 的支持。它的主要作用是帮助开发者在不同版本的…...

AI大模型+全渠道整合:容联七陌智能客服赋能制造业升级

自《中国制造2025》战略提出以来&#xff0c;制造业的智能化发展进入快车道&#xff0c;但行业仍面临劳动力成本上升、供应链不透明、客户需求碎片化等挑战。企业亟需通过技术手段实现降本增效&#xff0c;而智能化客户服务成为关键突破口。 与此同时&#xff0c;客服行业正经历…...

Vue 技术解析:从核心概念到实战应用

Vue.js 是一款流行的渐进式前端框架&#xff0c;以其简洁的 API、灵活的组件化结构和高效的响应式数据绑定而受到开发者的广泛欢迎。本文将深入解析 Vue 技术的核心概念、原理和应用场景&#xff0c;帮助开发者更好地理解和使用 Vue.js。 一、Vue 的设计哲学与核心概念 &…...

中英文提示词对AI IDE编程能力影响有多大?

深度剖析 &#x1f9e0;&#xff1a;中英文提示词对AI IDE编程能力影响有多大&#xff1f;&#xff08;附实战建议&#xff09; 作者&#xff1a;AI助手 | 日期&#xff1a;2023-10-27 | 标签&#xff1a;AI, IDE, Prompt Engineering, LLM, 编程效率 摘要&#xff1a;随着 AI…...

ARM处理器程序烧写方式

一、烧写原理 无论是jtag还是串口烧写&#xff0c;本质都是先通过上位机&#xff08;keil 或者flymcu或者芯片官方上位机等烧写bin的上位机&#xff09;往mcu的ram里烧写一段代码即.FLM文件&#xff0c;这段代码在上位机&#xff08;keil体现在配置项里&#xff0c;flymcu应该…...

AI 项目详细开发步骤指南

AI 项目详细开发步骤指南 一、环境搭建详解 1. JDK 17 安装与配置 Windows 系统安装步骤&#xff1a; 访问 Oracle 官网下载 JDK 17 安装包&#xff1a;https://www.oracle.com/java/technologies/downloads/#java17下载 Windows x64 Installer 版本双击安装包&#xff0c;…...