高性能MySQL(3th)(第一章 MySQL概述) —— 03 MySQL默认事务提交

Mysql高性能优化笔记(含578页笔记PDF文档),收藏了 Mysql是大家平时都会用到的技术点,这份578页笔记文档收藏了! 阅读详情

一 MySQL默认采用自动提交(autocommit)

注意,MySQL的innodb引擎支持事务,MyISAM不支持。对于innodb而言,每一条“sql+分号”+回车后,就相当于封装了一个事务,即以下的第一种方式实质上就是第二种方式:

第一种:

第二种:

一言以蔽之 —— Innodb的每一条sql都默认是自动提交的事务。

则就有了这样的推论:采用Innodb引擎的默认情况下(autocommit为真),客户端向服务器的请求都被封装成了事务的形式,而这也引出了很有趣的一个问题:

我们对表的增删改查sql真的都持久化到硬盘中了吗?

答案:并没有。

看下个点。

 

二 事务日志

这段文字涉及到“内存拷贝”这个知识点,这里简单介绍。

数据库中的数据(包括索引)都是在硬盘中的,对表的修改是通过磁盘 —— 内存的I/O来实现的,最小单位为固定的16K,即计算机每次将磁盘中需要的数据库数据调入内存(一页16K),如上例sql查询:

其实是从磁盘中调入内存之后显示的(更具体的是,将student表从硬盘调入内存???),那么如果现在进行更新操作,如:

首先,这里的update会被封装成事务,然后尝试对原来的 id为1,name为Tom的记录进行修改,但这里的修改不是直接去硬盘中修改(或者说将内存中的拷贝修改完了立马持久化到硬盘中),从上面的说明中可以看到,Innodb采用这样的策略:

①.修改内存中的拷贝数据

②.将update事务的行为(相当于DML和DCL日志)记录到事务日志中

③.慢慢地(分摊到系统较为空闲的时间段内)将内存中的拷贝数据刷回硬盘

这其中涉及到两个注意的地方(图中用星号表示): 

两次写硬盘:一次持久化事务日志,一次将内存拷贝刷回硬盘。

如果第二次写硬盘过程中发生掉电,则没有关系,下次开机从利用事务日志的记录重新持久化即可。

这里顺便补充一下:

如果第一次持久化(写硬盘中的事务日志)过程中发生掉电怎么办?

封装成事务的前提是:只有事务持久化完成了才会返回成功,换言之,如果事务持久化过程中发生掉电,则:

这条语句将会返回失败,回头再看掉电之前的数据变化:其实就仅仅次改了内存拷贝而已,硬盘中数据没有任何变化(事务日志都没搞完),这和外部结果——sql执行失败是一致的,符合逻辑。

同理,如果在修改内存拷贝过程中掉电,则更不用说,外部sql执行失败(这个事务的第一步都没完成),内部硬盘中的数据也没有发生任何改变。OK。

 

 

 

MySQL事务底层原理与实战避坑指南 事务是数据库保障数据一致性的核心机制,其本质是通过锁(Lock)、多版本并发控制(MVCC)、undo log回滚和redo log持久化等技术协同实现ACID特性。不同隔离级别(如READ COMMITTED与REPEATABLE READ)在快照生成时机、间隙锁行为及幻读表现上存在根本差异;而InnoDB与PostgreSQL等引擎对事务的实现逻辑迥异,导致相同SQL语义下锁机制与一致性效果截然不同。理解事务不能停留在@Transactional注解或BEGIN/COMMIT语法层面,必须深入存储引擎执 阅读详情

相关推荐

Ansys Zemax与Speos协同设计:HUD系统从光学优化到驾驶模拟的全流程解析

本文详细解析了如何利用Ansys Zemax与Speos这对“黄金搭档”进行HUD系统的协同设计。流程始于Zemax进行核心光学架构与像差优化,奠定性能基础;随后将设计无缝导入Speos,通过HUD光学分析模块进行量化验证;最终在虚拟驾驶环境中进行沉浸式模拟,评估实际视觉体验与系统集成效果,实现从光学优化到驾驶模拟的全流程闭环。

weixin_29201933的博客 272

高性能MySQL(3th)(第一章 MySQL概述 ) —— 02 MySQL隔离级别

一 数据库隔离级别标准 抛开MySQL,一般性的数据库隔离级别有4种: 而不同的隔离级别可以避免的并发不一致问题也是不一样的: 关于三种问题的描述,可以详见: 并发一致性问题 这里谈谈自己对不同隔离级别为什么会产生相应的并发一致性问题的理解: 1)未提交读产生脏读 这里其实最好理解,未提交读可以认为未实现事务的“隔离性”,导致其他事务可以“看见”本事务的数据,就如并发一...

ProLayman的博客 239

FPGA加速SNN实现MNIST手写数字识别的实践与优化

脉冲神经网络(SNN)作为第三代神经网络模型,采用生物启发的脉冲事件驱动机制,在处理时序信号时具有天然能效优势。其核心原理是通过神经元仅在接收足够输入脉冲时激活的稀疏特性,大幅降低计算能耗。在FPGA硬件加速领域,SNN通过量化优化、硬件友好型神经元模型设计等关键技术,可在边缘计算场景实现超高能效比。本文以MNIST手写数字识别为案例,详细解析了从6bit量化策略到双缓冲流水线设计的完整优化路径,最终在Xilinx Kintex-7平台实现97.54%识别准确率的同时,功耗仅231mW,能效比达81,712

weixin_30417487的博客 529

高性能MySQL(3th)(第一章 MySQL概述) —— 04 InnoDB和MyISAM

一 InnoDB和MyISAM存储方式 聚簇 VS 非聚簇 InnoDB采用聚簇索引的方式存储数据,即主键索引(若没有设置unique索引则InnoDB会默认给主键创建索引)和数据一起存储,或者说,表中的数据是在内存中是按照主键索引的递增顺序组织存储的。对于InnoDB,一条sql如果筛选条件利用了主键索引,则InnoDB会直接查询数据文件,在叶子节点即可拿到数据。 而MyISAM则采用了非......

ProLayman的博客 329

可视化工具--Plotly

随着信息技术的发展和硬件设备成本的降低,当今的互联网存在海量的数据,要想快速从这些数据中获取更多有效的信息,数据可视化是重要的一环。对于Python语言来说,比较传统的数据可视化模块是Matplotlib,但它存在不够美观、静态性、不易分享等缺点,限制了Python在数据可视化方面的发展。   为了解决这个问题,新型的动态可视化开源模块Plotly应运而生。由于Plotly具有动态、美观、易用、种类丰富等特性,所以一经问世就受到开发人员的喜爱。

YFater的博客 1万+

QProgressBar:常用接口、样式表及自定义进度条实现

在Qt开发中,QProgressBar 是一个非常常用的控件,用于显示任务的进度。无论是文件下载、数据处理还是其他耗时操作,QProgressBar 都能直观地展示当前进度。本文将详细介绍QProgressBar 的使用方法,包括常用接口、样式表设置,并额外补充一个自定义进度条的C++实现。

u011186532的专栏 1012

高性能MySQL(3th)(第一章 MySQL概述) —— 01 MySQL逻辑架构

MySQL逻辑架构 可以分为三层:客户端,服务层,存储引擎层。 书中写到: 注意,第一个行的“最上层的服务“指的不是客户端,而是图中的“连接/线程处理”,实际上,MySQL 和Redis一样,是C/S架构的,客户端只是服务调用者,所有服务都由服务端提供。而我们敲的sql语句(默认自动事务提交)或者事务在敲回车之前,都只是还未发送的客户端请求而已。 而对于上图中服务器层和存储引擎层各...

ProLayman的博客 343

RK3588,V4l2 读取Gmsl相机, Rga yuv422转换rgb (dma), 实现零拷贝

RK3588, 使用V4l2 读取 gmsl 相机,获得yuv422格式图像, 使用 rga 转换 rgb 图像。减少cpu占用率. 内存管理方式采用 dma,实现零拷贝.

J。 1262

高性能MySQL(3th)(知识补丁) —— 一条sql的执行过程

《高性能MySQL》第三版 P.204: 这里说一下,查询缓存的作用: 要点: ① 要比对SQL语句是不是一模一样,这个比对可以通过类似于hashmap.get(sql)来实现的(联想Java中的HashMap<String,String>),如果存在则直接拿到结果,如果没有则说明没有该sql查询的记录。 ② 如果命中,不能直接返回结果,要检查一下用户权限。...

ProLayman的博客 202

使用自己的数据跑通mmsegmentation

使用自己的数据跑通mmsegmentation,解决以下报错:1)type object 'FileClient' has no attribute 'infer_client' 2)It is expected output_size equals to 2, but got size 3 3)训练测试结果报NAN 4)KeyError: 'MyDataset is not in the dataset registry' 5)预训练模型和加载的网络结构层名有差异,unexpected key .....

猫猫与橙子的博客 1656

嵌入式工程师必学(9):USB 3.0协议理解

USB3.0和USB2.0相比,在线缆上从4根线(Vbus、GND、D+、D-)变为了8根线(Vbus、GND、D+、D-、SSRX+\SSRX-\SSTX+\SSTX-),可见增加的4根线都是和超速相关的,新增加的超速有两类,分别为:超速Gen1(5.0Gbps),超速+Gen2(10Gbps),还兼容USB2.0的3类速率:low-speed(1.5Mbps),full-speed(12Mbps),andhigh-speed(480Mbps)。从设计可以看出,USB3....

码农17年的博客 1万+

Th3inspector端口扫描与安全评估:识别开放服务和潜在风险

在网络安全领域,及时发现并修复系统漏洞是保护网络资产的关键步骤。Th3inspector作为一款功能强大的信息收集工具,不仅能帮助用户全面了解目标系统的开放端口和服务状态,还能为安全评估提供重要依据。本文将详细介绍如何使用Th3inspector进行端口扫描与安全评估,帮助新手用户轻松掌握这一实用技能。 [![Th3inspector端口扫描工具](https://raw.gitcode.com

gitblog_00885的博客 1061

WPS访问权限不足怎么解决??具体怎么操作?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

**My Coding Family** 4170

高性能MySQL 第4版

Performance Schema同了有关MySQL服务器内部运行的操作上的底层指标。Performance Schema有两个概念:程序插桩:程序插桩在MySQL代码中插入探测代码,以获取我么你想了解的信息。消费者表:指存储关于程序插桩代码信息的表。如果我们为查询模块添加插桩,相应的消费者表将记录诸如执行总数、未使用索引的次数、花费的时间等信息。消费者表是插桩发送信息的目的地。

xx先森 1344

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

高性能MySQL(3th)(第六章 sql优化) —— 03 重构sql查询方式

重构sql查询方式 一 一个复杂的关联查询 VS 多个简单查询 如果这个复杂查询的所需要的扫描的行数本来就很小,换言之,直接使用复杂查询MySQL很容易完成,则不必多说,直接用一个复杂的即可。这里之所以讨论是否分解为多个简单查询,就是因为在复杂查询涉及的表大,扫描行多时,看能否进行性能上的优化。 先看一个例子: 单个复杂查询: 多个简单查询: 当然,这里注意,从第二行开始的每...

ProLayman的博客 238

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

高性能MySQL(3th)(第六章 sql优化) —— 06 查询优化器的工作

一 优化器在MySQL架构中的位置: 二 先看逻辑上的作用 一言以蔽之:找到最好的执行计划。 三 静态优化和动态优化 这个和一般的编译器优化的区别差不多,静态优化即语法上的转换,替换常量等等,动态优化则要考虑实时的运行状态,选择最优的执行路线。 四 优化器常见的工作 简单的表达式中进行常量的等价替换: MIN MAX COUNT: 外连接转化为内连接: ...

ProLayman的博客 267

高性能MySQL(3th)(第六章 sql优化) —— 02 利用索引

索引的知识太多,学问太深,《高性能MySQL》专门拿出一整章叙述这个问题(第五章),从索引的原理(B+树),InnoDB的数据存储方式(聚簇索引),到如何建立好的索引 —— 避免冗余索引,在选择性比较好的列上建立索引,建立组合索引从而形成覆盖索引,索引的最左匹配原则等等。 这里就不再展开,后面将有专题专门介绍。 ...

ProLayman的博客 193

按照apa6th格式复制_MySQL 入门(5):复制

摘要在这篇文章中,我将从MySQL为什么需要主从复制开始讲起,然后会提到MySQL复制的前提,bin log。 在这里会说明三种格式的bin log分别会有什么优缺点。 随后会讲到主从延迟方面的问题,我将从几个角度出发,提供一些可能造成延迟的思路。 1 为什么需要复制MySQL内建的复制功能是构建大型,高性能应用程序的基础。随着目前并发量的增加,单机的MySQL渐渐没有办法承担这些请求,所...

weixin_34030345的博客 174

读高性能MySQL(第4版)笔记21_读后总结与感想兼导读

总结与感想和导读

lyingSeven的博客 996

【免费下载】 高性能【mysql】 第四版 英文版 PDF下载

本仓库提供《高性能MySQL》第四版英文版的PDF下载。该书是MySQL数据库领域的经典著作,涵盖了MySQL性能优化的各个方面,适合数据库管理员、开发人员以及对MySQL性能优化感兴趣的读者阅读。 ## 资源信息 - **书名**: 高性能MySQL 第四版 - **语言**: 英文 - **格式**: PDF - **版本**: 第四版 ## 下载说明 请在仓库中找到对应的PDF文件进...

gitblog_06615的博客 1285

高性能MySQL(3th)(第六章 sql优化) —— 01 减少冗余数据

一 查询冗余的条数 如实际前台只需要TOP10,但是查询时使用 LIMIT 100。 解决方案:使用需要的大小限制。e.g. LIMIT 10,或者至多LIMIT 20。 二 查询冗余的的列 避免使用 “ select * “ 这种不加选择的select语句,或者“ select col1,col2 “而实际上只使用col1的情况。这会带来多余的I/O,数据传输,内存,CPU的消耗...

ProLayman的博客 465

高性能MySQL(3th)(知识补丁) —— 为什么要设置主键自增

① 保证始终在B+树右侧insert 自增ID可以保证每次插入时B+索引是从右边扩展的,可以避免B+树和频繁合并和分裂(对比使用UUID)。如果使用字符串主键和随机主键,会使得数据随机插入,效率比较差。 在右侧就算分裂也只是右边缘分裂,左侧不会影响。 ② 自增同时保证了唯一性 如果只是unique,则id唯一性需要应用程序来保证(unique只能“检查”给定的id是否重复),而self-i...

ProLayman的博客 289

atomikos mysql_mysql – Atomikos:当事务包含多个持久性时...

我正在试验Atomikos提供的独立JPA和JTA / XA事务管理.我的简单单元测试持久存储3条记录,包含在JTA UserTransaction中.使用H2作为后备数据库时,测试工作正常.使用MySQL作为后备数据库时,第二个持久性引发此异常:com.mysql.jdbc.jdbc2.optional.MysqlXAException: XAER_INVAL: Invalid argument...

weixin_36478445的博客 551

高性能MySQL(3th)(第六章 sql优化) —— 04 半双工的C/S通信方式

划重点: 1)MySQL的C/S是半双工的,即双方都能够发送接收,但是信道在一个时间点只能发送/接收。 2)客户端一次只能发送一个数据包进行查询,长度由max_allowed_packet限制;但是服务端一次能发送多个数据包给客户端,并且客户端最好要一直接收完毕,这就是为什么建议使用LIMIT。 3)客户端从服务端接收数据像是“从消防水管喝水”,被动且无奈。 ...

ProLayman的博客 270

mysql 5.7 并行复制_MySQL 5.7 并行复制

一、缘由:某天看到主从复制延时的告警有点频繁,就想着是不是彻底可以解决一下。一般主从复制,有三个线程参与,都是单线程:Binlog Dump(主) ----->IO Thread (从) -----> SQL Thread(从)。复制出现延迟一般出在两个地方1)SQL线程忙不过来(可能需要应用数据量较大,可能和从库本身的一些操作有锁和资源的冲突;主库可以并发写,SQL线程不可以;主要原...

weixin_39819661的博客 400

mysql漂移后造成事务堆积_MySQL慢日志占满磁盘空间导致业务主库宕机解决

在 MySQL 的日常维护中,我们总会遇到这样或那样的问题,对于那些经常发生且有处理经验的事故,不论是新手还是老司机都能在故障规定的容错时间内解决。而对于那些不常见、比较棘手的问题,新手上路可能就显得举足无措了,这个时候新手和老司机的差距就体现出来了。从知识储备还是工作经验,可能老司机比新手强一点,但如果一个新司机没有日志排错的意识,不具备日志排错的经验,那怎么能学会弯道超车、漂移的快感。我们知道...

weixin_30609253的博客 299
上一篇: 高性能MySQL(3th)(第一章 MySQL概述 ) —— 02 MySQL隔离级别
下一篇: 高性能MySQL(3th)(知识补丁) —— 为什么要设置主键自增
ProLayman
博客等级 码龄10年 105粉丝 192原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值