事务的ACID

VSCode插件‘C/C++ Advanced Lint’报错?别慌!可能是这个配置项在搞鬼(附完整排查指南) 本文详细解析了VSCode插件‘C/C++ Advanced Lint’常见报错原因及解决方案,包括配置项检查、依赖工具链验证和高级排查技术。特别针对Ubuntu20.04环境和Clang工具链提供了实用指南,帮助开发者快速定位并修复静态语法检测问题,提升开发效率。 阅读详情

这是对沈询大神讲解的事务 的笔记。

课程链接

事务简介

事务的本质是锁和并发

ACID保证事务的完整性

事务也称为单个事务单元。
    例如 
        转账:A-->B 100元A账户减少100,B账户增加100。
        在此操作过程中必须要保证完整,一致。这就是一个事务单元。
    除了转账的问题还有一些也是事务单元:
        * 建立索引
        * 从数据库中读取一条数据
        * 向数据库中写入一条数据,同时更新这行记录的所有索引
        * 删除 整张表


一组事务单元 :
    多个事务单元之间的happen-before关系:
        * 读写
        * 写读
        * 读读
        * 写写

如何对一组事务单元的关系进行排序是很重要的

  1. 序列化读写1
  2. 排它锁[^2]
  3. 读写锁[^3]
  4. MVCC

MVCC: copy on write针对写读场景的优化。 在写的时候,依旧可以进行并发读。
它可以做到 读读不冲突,读写不冲突,写读不冲突。
本质是每一次数据写入都放入一个log里面

隔离性是对一致性的一种破坏

处理事务的常见思路

事务处理的常见问题

  • 多个事务单元,谁先谁后?
  • 如何进行故障恢复?
  • 碰到死锁如何处理?

    1. 在orcle中是SCN(逻辑时间戳) 在inno_db中是Trx_id
    2. 业务属性不匹配,记录每一步操作的反向操作。 如果数据库崩溃,那么重启后在进行数据恢复的时候,在整个回滚过程中,这个系统是无法被外界访问的。
    3. 死锁与死锁检测: 死锁产生原因: 两个线程,不同方向加锁,相同的资源
死锁检测

碰撞检测 等锁超时 降低隔离级别

深入单机事务

事务的ACID

  • 原子性
  • 一致性
  • 隔离性
    • 序列化读
    • 可重复读 (读加锁,只能做到读)
    • 读已提交 (读锁可以被写锁升级。 可以读写 但是不可以 写读)
    • 读未提交 (可能会读到中间状态的值,比如转账过程中,两个人钱都为0)
  • 持久性
原子性
一个事务要么同时成功,要么同时失败。原子性只保证了记录了一个回滚段,
在事务失败的时候,可以回滚到上一个操作的状态。
一致性
多个事务之间的 happen-before关系
将所有的请求,排队。
最终要的部分就是如何处理不同事务之间的读写并行
隔离性
以性能为理由对一致性的破坏
除了sql92的 四个隔离级别之外 又有了一个新的隔离级别, 快照隔离级别。
mvcc  无锁编程  快照读可以保证在读到一致性的同时实现读未提交。
 当读大于写的时候会增加系统的成本。  适合读写比率比较高的情况。
持久性
事务完成之后,该事务对数据库所做的所有更改便持久的保存在数据库中。
将请求打包后提交
* 直接写入内存  优点:IOPS很高  缺点: 很可能丢失数据
* GroupCommit   有点:保证系统的持久性和吞吐量 缺点: 请求的延迟高

事务的调优原则

  • 在不影响业务的情况下,尽可能减少锁的覆盖范围
  • 在不影响业务的情况下,增加锁上可以并行的线程数
    • 读锁,写锁分离。
    • 允许并行读取数据。
  • 在不影响业务的情况下,选择正确的锁类型

悲观锁 使线程到blocking状态 适合并发争抢比较严重的场景

乐观锁 适合并发争抢不太严重的场景

事务个各个不同隔离级别可能会带来的问题

脏读

在一个事务正在访问数据,并对数据进行了修改,这种数据还没提交到数据库,
被另一个事务所读到这个数据。
这个应该是 读未提交引发的,即写读可并行。

幻读

目前工资为1000的员工有10人。
事务1,读取所有工资为1000的员工。
这时事务2向employee表插入了一条员工记录,工资也为1000
事务1再次读取所有工资为1000的员工 共读取到了11条记录, 
解决办法:如果在操作事务完成数据处理之前,任何其他事务都不可以添加新数据     ,则可避免该问题

这个从应该是 读写 可并行引起的。

不可重复读

不可重复读的重点是修改 :
 同样的条件, 你读取过的数据,再次读取出来发现值不一样了
幻读的重点在于新增或者删除 :
 同样的条件, 第 1 次和第 2 次读出来的记录数不一样

  1. 该方式的优势是 不需要冲突控制劣势是慢速设备
    [^2]: 两个事务单元之间完全没有冲突则进行并行
    [^3]: 写读之间完全分开,让读读并行 ↩
事务的ACID如何保证 一些概念名词 redo log: 重做日志 ib_logfile0~1 默认50M , 轮询使用 redo log buffer : redo内存区域 ibd : 存储 数据行和索引 data buffer pool : 缓冲区池,数据和索引的缓冲 LSN : 日志序列号 ibd ,redolog ,data buffer pool, redo buffer MySQL 每次数据库启动,都会比较磁盘数据页和redolog的LSN,必须要求两者LSN一致数据库才能正常启动 WAL (持久化): wr 阅读详情

相关推荐

什么是事务?事务的四大特性(ACID)?

摘要 事务是数据库中将多个操作打包为原子单元的逻辑工作单元,确保数据一致性。其四大特性(ACID)包括:1)原子性-通过undo log实现全部成功或全部失败;2)一致性-确保事务前后数据符合约束和业务规则;3)隔离性-通过MVCC和锁机制控制并发访问;4)持久性-使用redo log保证提交后数据永久保存。实际应用中需考虑隔离级别选择、分布式事务处理及性能优化等问题。理解事务机制对开发可靠数据库应用至关重要。

hixiaoyang的博客 995

数据库原理第十章学习笔记

事务是一系列的数据库操作,是数据库应用程序的基本逻辑单元。事务处理(transaction processing)技术主要包括数据库恢复技术和并发控制技术。 10.1 事务的基本概念 **事务:**是用户定义的一个数据库操作序列,是一个不可分割的工作单位(原子性);一般的,一个程序中被包含多个事务。如果用户没有显式的定义事务,则DBMS自动划分事务。事务一般以BEGIN TRANSACTION开始,以COMMIT或ROLLBACK结束。ROLLBACK表示回滚,系统将事务中对数据库的所有已完成的操作全部撤销

学习日常分享 981

GAN实战:用Python和TensorFlow打造你的第一个生成对抗网络(附完整代码)

本文是一份详细的GAN实战指南,指导读者使用Python和TensorFlow框架从零开始构建并训练一个生成对抗网络。文章涵盖了环境搭建、MNIST数据预处理、生成器与判别器模型构建、对抗性损失函数定义、训练循环编写以及关键的调试技巧,旨在帮助开发者通过动手实践深入理解GAN的核心原理与实现过程。

php55的博客 480

《数据库系统概论》 第十章 数据库恢复技术

事务是一系列的数据库操作,是数据库应用程序的基本逻辑单元。事务处理(transaction processing)技术主要包括数据库恢复技术和并发控制技术。 10.1 事务的基本概念 事务:是用户定义的一个数据库操作序列,是一个不可分割的工作单位(原子性) 一般的,一个程序中被包含多个事务。如果用户没有显式的定义事务,则DBMS自动划分事务。 事务一般以BEGIN TRANSACTION...

doctor_fung的博客 1万+

【数据库】银行/信贷业务测试工作中涉及的数据库表格

银行/信贷业务测试工作中涉及的数据库表格,金融信贷测试人必看!

孤之鹜的博客 1170

UR5 机械臂手眼标定(Eye-in-Hand)实战:OpenCV 求解 AX=XB,误差 < 2mm

本文详细介绍了UR5机械臂在Eye-in-Hand配置下的手眼标定实战,通过OpenCV实现高精度标定,最终达到误差小于2mm的工业级精度要求。文章涵盖了标定基础原理、环境搭建、数据采集策略、核心算法实现及误差分析与优化,为视觉机械臂的自主抓取提供了实用指南。

weixin_31476015的博客 295

事务的概念及其ACID特性

一、事务的概念 事务是用户定义的一个数据库操作序列,这些操作要么全不做,要么全做,是一个不可分割的工作单位。例如在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或者整个程序。 事务和程序是两个概念。一般的讲一个程序包含多个事务。 事务的开始与结束可以有用户显式控制。如果用户没有显式的定义事务,则由数据库管理系统DBMS按默认规定自动划分事务。在SQL中,定义事务的语句一般有三条...

http_red的博客 5056

Claude Skills:不是更聪明,而是更“像专家”的 Agent 养成方法

Claude Skills 不是在告诉 Agent“你能做什么”, 而是在约束它“你应该如何思考、如何判断、如何给结论”。

测试者家园 1293

深入理解事务--事务ACID特性及隔离级别

简介       ACID,是指在可靠数据库管理系统(DBMS)中,事务(transaction)所应该具有的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability).这是可靠数据库所应具备的几个特性.下面针对这几个特性进行逐个讲解. 理解原子性(Atomicity)    原

yuanlaishini2010的专栏 7152

Tessent实战:网表扫描链插入全流程解析

本文详细解析了使用Tessent工具为网表插入扫描链(Scan Chain)的全流程。从前期环境配置、网表检查,到扫描链数量、时钟域等核心配置,再到执行扫描单元替换与连接,最后进行结果验证与文件输出。文章提供了关键命令与实用技巧,帮助工程师高效完成DFT设计,确保芯片可测试性。

hhh00的博客 747

TI Sitara PRU可编程实时单元:工业自动化中的硬实时协处理器解析

在嵌入式系统与工业自动化领域,实时性和确定性是核心需求。实时性指系统对外部事件做出响应的可预测时间,确定性则要求响应时间严格一致,不受其他任务干扰。其技术原理通常通过专用硬件或实时操作系统实现,例如采用独立于主CPU的协处理器来处理高精度时序任务。这种设计的技术价值在于,它能将主CPU从高实时性要求的任务中解放出来,专注于复杂业务逻辑,同时确保关键IO操作达到纳秒级延迟和极低抖动。应用场景广泛覆盖伺服电机控制、工业通信协议加速和多接口扩展等。本文聚焦的TI Sitara系列PRU(可编程实时单元),正是此类

weixin_42526068的博客 284

ACID--事务四大特性

ACID,指的是在数据库事务正确执行的四个基本要素的缩写。 具体解释: 原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability) 任何一个数据库事务必须满足ACID,只有这样才能保证在事务执行过程中的正确性。 原子性(Atomicity) 原子性其实非常好理解,我认为它指的就是一种完整性,就是说任何一个具备原子性的事务只有两种状态:完成操作 和 未操作。原子性保证事务的一切操作要么一起成功要么一起失败。原子性的事务一旦开始就一直运

m0_60252632的博客 6156

c++ webrtc基础(1) :webrtc源码下载与编译、项目模块介绍、学习资料推荐

本篇博客介绍webrtc源码的下载与编译,以及推荐webrtc学习资料。 源码下载 电脑环境:win10/win11 64bit,合理的上网环境,没有合理的网络环境无法拉取、下载webrtc代码和工具,宽带速度要快,尽量50M. 主要步骤如下: (1) 安装git (2) 打开cmd控制台,下载google开发工具depot_tools: git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git (3) 新建一个目

琅嬛福地 3295

事务的acid属性是指_什么是事务的acid性质

匿名用户1级2017-05-03 回答ACID,是指在数据库管理系统(DBMS)中事务所具有的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。在数据库系统中,一个事务是指由一系列数据库操作组成的一个完整的逻辑过程。例如银行转帐,从原账户扣除金额,以及向目标账户添加金额,这两个数据库操作的总和构成一个...

weixin_36326528的博客 2097

在 NVIDIA DGX Spark 上运行 vLLM + Open WebUI

DGX Spark 和 GX10 都是性能强大的机器,但只有将它们视为交互式工作站而非精简版服务器,才能真正发挥它们的优势。合理利用共享资源,规划并发工作负载,并谨慎控制内存限制。做到这些,vLLM 与 Open WebUI 的结合就能成为可靠​​的日常工具,而不是脆弱的实验品。DGX平台本身价格不菲,但这并非体验此类硬件的唯一途径。多家厂商提供基于相同核心架构、价格更为亲民的系统,这些系统通常配备容量较小的固态硬盘或配置更为简化,但基本性能并未改变。

iCloudEnd的博客 1750

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

什么是事务的ACID特性?

事务的ACID特性是指数据库事务的四个基本属性,分别是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。这四个特性共同确保了事务的可靠性和数据库的一致性。原子性(Atomicity) :事务是一个不可分割的工作单元,要么全部成功执行,要么全部不执行。如果事务中的任何操作失败,则整个事务将被回滚到初始状态,就像这个事务从未执行过一样。一致性(Consistency) :事务必须使数据库从一个一致状态转换到另一个一致状态。这意味着事务的

破损的天堂鸟博客 1331

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

什么是事务?事务的ACID特性

事务 事务(Transaction)是一个数据库操作序列, 这些操作要么全做,要么全不做,是一个不可分割的工作单位。 事务是恢复和并发控制的基本单位。 事务既可以显式定义,也可以由DBMS自动定义。 事务和程序 在关系数据库中,一个事务可以是一条SQL语句,一组 SQL语句或整个程序,一个程序通常包含多个事务。 牢记事务是一个原子操作即可,类比OS中的原语。 ⭐️事务的ACID特性 原子性(Atomicity) 事务中包括的诸操作要么都做,要么都不做。 ????一致性(Consistency) 事务执行的

Suprit's blog 2596

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

事务及事务ACID特性的理解

事务及事务ACID特性的理解 首先,我们需要弄清楚为什么会出现事务。事务从本质上来说是为了应用层服务的。也就是说是为了方便业务系统的开发,简化业务系统的编程模型,事务并不是伴随着数据库系统天生就有的。事务需要具有原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability),也就是常说的事务的ACID四大特性。 原子性(atomicit...

Ryanqy的专栏 1304

事务acid

事务

一个想交朋友的陌生人 894

mysql事务acid,MySQL如何实现事务的ACID

事务的四大特性ACID事务的四大特性ACID分别是,A-原子性(Atomicity),C-一致性(Consistency),I-隔离性(Isolation),D-持久性(Durability)。一致性是最终目的,原子性、隔离性、持久性是为了保证一致性所做的措施。所以我写的顺序并不是按照ACID来写的,将一致性放到了最后,顺序就变成了,ADIC。原子性(A)原子性是指一个事务就是一个不可分割的工作单...

weixin_42302638的博客 188

事务ACID

事务的ACID特性总结,以及mysql创建事务

qq_46480020的博客 718

事务的ACID属性

一 事务: 事务的ACID属性: 1、原子性(Atomicity)原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。 2、一致性(Consistency):事务必须使数据库从一个一致性状态变换到另外一个一致性状态。 3、隔离性(Isolation):事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执...

努力赚钱就可以住更好的养老院 8460

事务的 ACID 特性详解

事务的AICD特性

qw2869534823的博客 1109
上一篇: 我理解的docker
下一篇: java -jar启动jar包时携带参数不起效的解决办法
thecodeofsky
博客等级 码龄12年 2粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值