网站源码大全最新/百度游戏官网
MySQL主要有三种日志:undo log、redo log、binlog。前两种是InnoDB特有的,binlog是MySQL的Server层中的。
Buffer Pool
buffer pool是MySQL的缓冲池,里面存储了数据页、索引页、undo页等(与数据库不一致的即为脏页)。对数据库做的操作都会先在buffer pool中执行,后配合redo log持久化到磁盘。
undo log
事务回滚
undo log是回滚日志,用于保证事务原子性。在事务执行过程中会记录undo log日志(这里是先记录在buffer pool的undo页中,生成undo log,需要记录对应的redo log),若事务需要回滚,则根据undo log执行与原来相反的操作。
MVCC
我们知道数据库中的一条记录中包含了两个隐藏列:trx_id(事务ID)和roll_pointer(版本指针),undo log记录中也是如此,通过版本指针把记录的旧值连成链表(数据页中的数据就是最新版本),通过版本指针查找记录的旧版本,使用trx_id和Read View判断事务可见性。Read View是什么?
Read View : 快照,在可重复读级别下,每一个事务开始都会生成一个Read View,保证查看的数据一致。
重要字段:
- creator_trx_id:创建这个快照的事务ID
- m_ids:存储的是当前时刻活跃的事务ID(活跃事务指的是已已启动但未提交的事务)
- min_trx_id:活跃事务ID中的最小值
- max_trx_id:下一个事务分配的trx_id
如何判断事务可见性?
通过比较记录中的trx_id:
- trx_id < min_trx_id:代表修改记录的事务早就提交,可见。
- trx_id >= max_trx_id:代表修改记录的事务在当前时刻还没启动,不可见。
- 分两种情况:
- trx_id在m_ids中:事务未提交,不可见。
- trx_id不在m_ids中:事务已提交,不可见。
通过比较trx_id来控制并发事务,这就是MVCC(多版本并发控制)。
redo log
redo log是重做日志,使得MySQL具有crash-safe(崩溃恢复)能力,保证了事务的持久性。
首先,redo log是一个循环文件组,写入为循环写。通过以下两个参数设置文件数量和文件大小:
innodb_log_files_in_group
innodb_log_file_size
事务执行时的操作会被写入redo log buffer中,记录的字段主要有:操作类型、修改的数据页号、修改数据的页内偏移量、修改的字段值。
write pos指向当前记录的位置,checkpoint指向当前要擦除的位置。
当write pos追上checkpoint时,说明redo log文件满了,这时不能再进行新的更新操作了,更新操作的SQL将被堵塞。此时会停下来把buffer pool中的脏页刷盘,让checkpoint后推,才可以进行操作。
刷盘
- 写入方式:redo log文件是顺序写(性能好),而数据页是随机写。
- 刷盘时机:
- 数据库正常关闭
- InnoDB会有一个后台线程每隔一秒将redo log buffer持久化到磁盘
- 事务提交时(控制参数:
innodb_flush_log_at_trx_commit
)
innodb_flush_log_at_trx_commit参数
- 参数为0:留在redo log buffer中,不刷新到磁盘(可能会丢失上1秒的所有数据)。
- 参数为1:直接刷新到磁盘(fsync)。
- 参数为2:写入redo log文件(操作系统中的Page Cache)(操作系统不挂就不会丢失)。
参数0和2是通过上文说到的后台线程来刷盘的。
- 0:redo log buffer (write) -> Page Cache (fsync) -> 磁盘
- 2:Page Cache (fsync) -> 磁盘
binlog
binlog是归档日志。主要用于数据备份、主从复制。
与redo log的区别
- 适用范围不同:开篇就说了,redo log是InnoDB存储引擎特有的,binlog是都能使用的
- 日志格式:binlog有三种格式:ROW、STATEMENT(默认)、MIXED。
STATEMENT
:记录操作的SQL
(相当于记录了逻辑操作,所以针对这种格式binlog
可以被称为逻辑日志),主从复制中根据SQL语句
重现,但是当记录的SQL
中使用了动态函数(uuid, now...)
,这样就会导致主从数据不一致。ROW
:记录行数据被修改成什么样了(这时就不能称为是逻辑日志了),产生记录多,导致binlog文件
过大。MIXED
:根据情况自动选择日志格式(STATEMENT, ROW)
。redo log
是物理日志,记录的是在某个数据页做了什么修改。比如对 XXX 表空间中的 XXX数据页 ZZZ 偏移量的地方做了 AAA 修改。
- 写入方式不同:binlog是追加写,写满一个文件就创建一个新文件接着写。
- 用途不同。
主从复制
- 主库写入
binlog
,提交事务,更新数据。 - 从库会创建一个专门的
I/O
线程连接主库的log dump线程
,来接收主库的binlog
日志,然后再把binlog
信息写入一个relay log(中继日志)
,返回给主库“复制成功”的响应。 - 从库会创建一个用于回放
binlog
的线程,去读relay log
,然后回放binlog
更新存储引擎中的数据,最终实现主从的数据一致性。
什么时候刷盘
首先要知道的是一个事务的binlog
不能被拆开(因为要保证原子性)。
在事务执行过程中,会先把binlog
存储到binlog cache
,binlog cache(通过binlog_cache_size控制单个线程中binlog cache的大小),满了需要暂存到磁盘。
在事务提交时,会把binlog cache
的日志write
到Page Cache(binglog文件)
,并清空binlog cache
。通过sync_binlog
参数控制fsync
到磁盘的时机。
sync_binlog
参数:
- 0:不会
fsync
,后续由操作系统决定何时存储到磁盘 - 1:立刻
fsync
- N:等存储了 N 个事务的
binlog
再调用fsync
两阶段提交
目的:防止在提交事务时, redo log和binlog
有一个写入失败( 数据库宕机等原因 ),导致主从数据不一致。
主要方式就是先写redo log,后写binlog。
阶段1:准备阶段(Prepare):写入redo log
,将事务状态设为prepare
。
阶段2:提交阶段(Commit):写入binlog
并持久化到磁盘,成功后,将redo log
状态改为 commit
。
造成问题:
- 磁盘 I/O 次数多:一次事务提交至少需要两次刷盘
- 锁竞争激烈:为了保证多事务不发生顺序上的混乱
MySQL使用组提交的方式进行了优化,但是我在这里就不多说了。
相关文章:

MySQL有哪些日志?
MySQL主要有三种日志:undo log、redo log、binlog。前两种是InnoDB特有的,binlog是MySQL的Server层中的。 Buffer Pool buffer pool是MySQL的缓冲池,里面存储了数据页、索引页、undo页等(与数据库不一致的即为脏页)。…...

Axios:现代JavaScript HTTP客户端
在当今的Web开发中,与后端服务进行数据交换是必不可少的。Axios是一个基于Promise的HTTP客户端,用于浏览器和node.js,它提供了一个简单的API来执行HTTP请求。本文将介绍Axios的基本概念、优势、安装方法、基本用法以及如何使用Axios下载文件。…...

python学opencv|读取视频(一)灰度视频制作和保存
【1】引言 上一次课学习了用opencv读取图像,掌握了三个函数:cv.imread()、cv.imshow()、cv.imwrite() 相关链接如下: python学opencv|读取图像-CSDN博客 这次课我们继续,来学习用opencv读取视频。 【2】学习资源 首先是官网…...

【Rust WebAssembly 入门实操遇到的问题】
Rust WebAssembly 入门实操遇到的问题 什么是WebAssembly跟着教程走wasm-pack build error总结 什么是WebAssembly WebAssembly(简称Wasm)是一种基于堆栈的虚拟机的二进制指令 格式。Wasm 被设计为编程语言的可移植编译目标,支持在 Web 上部…...

掌握CMake中的变量:设置、使用及实际应用示例详解
掌握CMake中的变量:设置、使用及实际应用示例详解 在CMake中,变量的设置和使用是管理构建配置的核心部分,它使得项目配置更加灵活和动态。变量在CMake中用于保存各种数据,如路径、选项值或文件列表,可以在整个CMake配…...

React基础知识三 router路由全指南
现在最新版本是Router6和Router5有比较大的变化,Router5和Router4变化不大,本文以Router6的写法为主,也会对比和Router5的不同。比较全面。 安装路由 npm i react-router-dom基本使用 有两种Router,BrowserRouter和HashRouter&…...

[VUE]框架网页开发02-如何打包Vue.js框架网页并在服务器中通过Tomcat启动
在现代Web开发中,Vue.js已经成为前端开发的热门选择之一。然而,将Vue.js项目打包并部署到生产环境可能会让一些开发者感到困惑。本文将详细介绍如何将Vue.js项目打包,并通过Tomcat服务器启动运行。 1. 准备工作 确保你的项目能够正常运行,项…...

k8s Quality of Service
文章目录 QoS 分类规则QoS 类别影响创建 QoS 分类的案例1. Guaranteed QoS 示例示例 YAML 文件: 2. Burstable QoS 示例示例 YAML 文件: 3. BestEffort QoS 示例示例 YAML 文件: 4. 混合 QoS 示例(多个容器)示例 YAML …...

顶刊算法 | 鱼鹰算法OOA-BiTCN-BiGRU-Attention多输入单输出回归预测(Maltab)
顶刊算法 | 鱼鹰算法OOA-BiTCN-BiGRU-Attention多输入单输出回归预测(Maltab) 目录 顶刊算法 | 鱼鹰算法OOA-BiTCN-BiGRU-Attention多输入单输出回归预测(Maltab)效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实…...

什么语言适合做 Serverless 开发?
随着云计算的普及,**无服务器架构(Serverless Architecture)**成为一种流行的开发模式,它使得开发者无需管理服务器基础设施,专注于编写应用逻辑。无服务器架构通常按需提供计算资源,能够灵活地扩展&#x…...

使用OpenCV和卡尔曼滤波器进行实时活体检测
引言 在现代计算机视觉应用中,实时检测和跟踪物体是一项重要的任务。本文将详细介绍如何使用OpenCV库和卡尔曼滤波器来实现一个实时的活体检测系统。该系统能够通过摄像头捕捉视频流,并使用YOLOv3模型来检测目标对象(例如人)&…...

【25春招前端八股文】——JS数据类型检测方式
检测数据类型 # typeof 总结:数组、对象、null都会被判断为object,其他判断都正确的类型。 可以检测基本数据类型null会检测为Object,因为null也是一个空的引用对象复杂数据类型只能检测function和Object 情况说明: 数组&#x…...

Kafka的学习路径规划
目录标题 1. 记(记忆力)Kafka核心概念Kafka关键配置 2. 懂(理解力)Kafka工作原理Kafka核心功能Kafka架构设计 3. 网(知识网络)技术栈整合用例和场景 4. 拓(全面拓展)学习材料多样化内…...

linux模拟试题
Linux 基础阶段考试笔试模拟试卷 审核人:王旺旺 一.填空题(每题 1 分,共 30 分) 1.验证 httpd 服务是否启动的命令是_______ 答:systemctl status httpd 或 netstat -anptl 或 ss -anpt 2.将目录 xxhf 下所有文件的所属组改为 user1 的命令是_______ 答:chown -R ,user1 …...

Qt-界面优化QSS
QSS介绍 先说下CSS: 在⽹⻚前端开发领域中, CSS 是⼀个⾄关重要的部分. 描述了⼀个⽹⻚的 "样式". 从⽽起到对⽹⻚美化的作⽤。 Qt 仿照 CSS 的模式, 引⼊了 QSS, 来对 Qt 中的控件做出样式上的设定 。 CSS的功能很强大,QSS要逊色一些&#…...

QT实战-qt各种菜单样式实现
本文主要介绍了qt普通菜单样式、带选中样式、带子菜单样式、超过一屏幕菜单样式、自定义带有滚动条的菜单样式, 先上图如下: 1.普通菜单样式 代码: m_pmenu new QMenu(this);m_pmenu->setObjectName("quoteListMenu"); qss文…...

深度学习基础03_BP算法(下)过拟合和欠拟合
目录 一、BP算法(下) 0、反向传播代码回顾 写法一: 写法二(更常用): 1、BP中的梯度下降 1.数学描述 2.传统下降方式 3.优化梯度下降方式 指数加权平均 Momentum AdaGrad RMSProp Adam(常用) 总结 二、过拟合和欠拟合 1、概念 1.过拟合 …...

web vue 滑动选择 n宫格选中 九宫格选中
页面动态布局经常性要交给客户来操作,他们按时他们的习惯在同一个屏幕内显示若干个子视图,尤其是在医学影像领域对于影像的同屏显示目视对比显的更为重要。 来看看如下的用户体验: 设计为最多支持5行6列页面展示后,右侧的布局则动…...

Spring Boot整合EasyExcel
Spring Boot整合EasyExcel主要涉及到以下几个步骤: 1.添加EasyExcel依赖到Spring Boot项目的pom.xml文件中。 2.创建数据模型类,用于映射Excel文件中的数据。 3.编写读取和写入Excel的服务。 以下是一个简单的例子: 1.添加EasyExcel依赖 …...

微软表示不会使用你的 Word、Excel 数据进行 AI 训练
微软否认使用 Microsoft 365 应用程序(包括 Word、Excel 和 PowerPoint)收集数据来训练公司人工智能 (AI) 模型的说法。 此前,Tumblr 的一篇博文声称,雷德蒙德使用“互联体验”功能抓取客户的 Word 和 Excel 数据,用…...

JavaScript(一)
1.JavaScript 基本使用 2.JavaScript简单事件 3.JavaScript修改样式 4.JavaScript数据类型 JavaScript和Java有什么关系 知识点一 JavaScript基本使用 JS写在哪 还有一种写在中间的,也就是<head>里面 JS一些注意事项 JS修改元素内容 #JS获取对象<…...

Day 32 动态规划part01
今天正式开始动态规划! 理论基础 无论大家之前对动态规划学到什么程度,一定要先看 我讲的 动态规划理论基础。 如果没做过动态规划的题目,看我讲的理论基础,会有感觉 是不是简单题想复杂了? 其实并没有,我讲的理论基础内容,在动规章节所有题目都有运用,所以很重要!…...

winform跨线程更新界面
前言: 大家好,我是上位机马工,硕士毕业4年年入40万,目前在一家自动化公司担任软件经理,从事C#上位机软件开发8年以上!我们在开发C#程序的时候,有时候需要在非Ui主线程更新界面,为了…...

【合作原创】使用Termux搭建可以使用的生产力环境(二)
前言 上期文章没看的可以先从上期文章开始看起 【合作原创】使用Termux搭建可以使用的生产力环境(一)-CSDN博客 目前我们已经完成了FinalShell ssh连接手机Termux的功能了,这期我们继续朝我们的目标前进。今天早上有读者进群以为生成环境指…...

微积分复习笔记 Calculus Volume 2 - 3.3 Trigonometric Substitution
3.3 Trigonometric Substitution - Calculus Volume 2 | OpenStax...

vue2+svg+elementui实现花瓣图自定义el-select回显色卡图片
项目需要实现花瓣图,但是改图表在echarts,highCharts等案例中均未出现,有类似的韦恩图,但是和需求有所差距; 为实现该效果,静态图表上采取svg来手动绘制花瓣: 确定中心点,以该点为中…...

记录一次网关异常
记一次网关异常 网关时不时就会出现下面的异常。关键是不知道什么时候就会报错,并且有时候就算什么都不操作,也会导致这个异常。 ERROR org.springframework.scheduling.support.TaskUtils$LoggingErrorHandler - Unexpected error occurred in schedul…...

计算机网络——不同版本的 HTTP 协议
介绍 HTTP,即超文本传输协议(HyperText Transfer Protocol),是应用层的一个简单的请求-响应协议,它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。本文将介绍 HTTP 协议各个版本。 HTTP/1.0 HTTP/1…...

使用 LLaMA-Factory 微调
git clone https://github.com/hiyouga/LLaMA-Factory.git cd LLaMA-Factory pip install -e . pip install tf-keras[dataset_info.json](dataset_info.json) 包含了所有可用的数据集。如果您希望使用自定义数据集,请**务必**在 dataset_info.json 文件中添加*数据…...

vue2 虚拟DOM 和 真实DOM (概念、作用、Diff 算法)
虚拟 DOM 和 真实DOM(概念、作用、Diff 算法) 1.1 概念 真实 DOM(Document Object Model):是浏览器中用于表示文档结构的树形结构。 <h2>你好</h2>虚拟DOM:用 JavaScript 对象来模拟真实 DOM…...