mysql面试(二)

前言

这是mysql面试基础的第二节,主要是了解一下mysql数据更新的基本流程,还有三大日志的作用。但是具体的比如undolog是如何应用在mvcc机制中的,由于篇幅问题就放在下一在章节

数据更新流程

上面是说了更新真正数据之前的大致流程,下面来说一下更新数据的时候具体会进行哪些操作。

InnoDB重要的内存结构:缓存池

首先是存储引擎访问数据的时候,并不会直接对磁盘进行操作,而是先在内存的缓存池中进行查询,如果查询不到的话再到磁盘中取拿数据,这样能减少大量磁盘的直接操作。
并且执行更新语句的时候,不仅要把数据更新到缓存池中,还需要对数据加独占锁,避免同时有其他数据来进行更新操作(这个独占锁包含行锁、间隙锁,后面再具体聊)

更新undo日志

undoLog起到最重要的作用就是记录数据更新之前的原始数据,以及该线程的事务(在mvcc机制中会用到)。举个栗子,比如我们要把id=1的数据中name=zhangsan 改为name=lisi。那么就需要吧id=1 name=zhangsan这个数据线记录下来,并且标记事务id。

更新buffer pool缓存页

前面的步骤已经拿出来数据,并且加了锁防止其他线程更新,原始数据也进行记录了。这时候就可以把缓存池中的数据进行修改了,把id=1这条数据的name字段修改为lisi。
这时候这条数据就属于一条脏数据,因为在内存中和磁盘中的数据不一致。

更新redoLog

现在已经对缓存中的数据进行了修改,并且记录了原始数据,这么多操作步骤,都需要记录到这个redoLog日志中,它是InnoDB的核心日志。更新的时候会在这个redo日志中新增记录一条“id=1的数据修改了name字段,值改为了lisi”类似这种形式的日志记录。
在当前步骤的所有操作都是在内存中,并没有进行磁盘的物理数据进行操作。所以这个时候也是不怕服务突然宕机断电之类的极端情况,因为如果宕机,内存丢失,对于磁盘数据也是没有任何影响的,下次查询的时候重新从磁盘中获取之前的数据就可以了。

binLog

在更新缓存数据和日志到磁盘之前,还有一个binLog日志也是需要了解的,虽然它记录的数据和redoLog很类似,也是“某个时刻对某某数据进行了某某操作”。但是它和redoLog最大的区别就是redoLog是InnoDB是引擎自己的组件,而binLog是mysql server自己的日志文件。

提交事务

进行了这么多步骤,终于要提交事务了。要提醒的一点是,undoLog、redoLog、binLog都是会在提交事务的这个步骤中写入磁盘中
什么时候更新进磁盘其实是可以配置的
根据innodb_flush_log_at_trx_commit来配置,它有几个选项
当值为0时:提交事务同时,redo日志不会写入磁盘,一旦mysql崩溃便会丢失
当值为1时:提交事务同时,redo日志写入磁盘。
当值为2时:提交事务同时,redo日志会先写入磁盘缓存os cache,过一段时间 可能是一秒钟 再写入磁盘

再次更新redoLog

在commit之后,会在redoLog日志中标记本次更新已经commit,并且会将本次更新对应的binLog文件名称和文件的位置都记录进redoLog中去。标记完mysql的IO线程会随机将缓存中修改后的数据刷进磁盘中
更新流程类如图:
在这里插入图片描述

三大日志

binlog

我们上面已经说了binLog存储的大致数据以及更新时间,其实他的更新策略也是可以修改的
数据同步会使用这个日志,可以扩展一下这一点。
syuc_binlog参数可以控制binlog的刷盘策略。
当值为0时:提交事务时只将binlog存入os cecha缓存
当值为1时:提交事务时会将binlog同步写入磁盘

redoLog

为什么要使用redo log,它可以保证我们在事务提交之后,哪怕缓存中更新的数据没有被刷新到磁盘上,也不会丢失,如果宕机了,根据redolog就可以恢复更新的缓存。
redo log本质上记录的就是在什么位置修改了什么值表空间号+数据页号+偏移量+修改几个字节的值+具体的值
redo log中有一个redo log block的概念,可以理解为是redo log日志的一个个子单元,每个有512字节,那么写入redo log的时候也是这样一个个小单元顺序放进去的;并且将redo log刷进磁盘的时候,也是按照这样一个个小单元更新的。
更新磁盘数据的时候,是先放在redo log buffer缓冲区的,每隔一定时间,把这些数据刷进磁盘中

undoLog

什么是undo log?这个存在是为了做数据回滚的,不仅会存入数据的历史版本,而且会生成反操作语句。比如我们当前一个请求有删除和插入两个操作,当第一个删除delete操作执行完的时候,undo log中会有一个反操作语句insert;就是为了在插入操作失败的时候,用来删除操作的回滚。

预告

为了避免篇幅太长,MVCC机制就放在下一章节

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/382936.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

邮件安全篇:如何防止邮件泄密?

本文主要讨论组织内部用户违反保密规定通过邮件泄密的场景。其他场景导致邮箱泄密的问题(如账号被盗、邮件系统存在安全漏洞等)不在本文的讨论范围。本文主要从邮件系架构设计、邮件数据防泄漏系统、建立健全规章制度、安全意识培训等方面分别探讨。 1. …

sql-libs通关详解

1-4关 1.第一关 我们输入?id1 看回显,通过回显来判断是否存在注入,以及用什么方式进行注入,直接上图 可以根据结果指定是字符型且存在sql注入漏洞。因为该页面存在回显,所以我们可以使用联合查询。联合查询原理简单说一下&…

科研绘图系列:R语言组合堆积图(stacked barplot with multiple groups)

介绍 通常堆积图的X轴表示样本,样本可能会存在较多的分组信息,通过组合堆积图和样本标签分组信息,我们可以得到一张能展示更多信息的可发表图形。 加载R包 knitr::opts_chunk$set(warning = F, message = F) library(tidyverse) library(cowplot) library(patchwork)导入…

【React】JSX:从基础语法到高级用法的深入解析

文章目录 一、什么是 JSX?1. 基础语法2. 嵌入表达式3. 使用属性4. JSX 是表达式 二、JSX 的注意事项1. 必须包含在单个父元素内2. JSX 中的注释3. 避免注入攻击 三、JSX 的高级用法1. 条件渲染2. 列表渲染3. 内联样式4. 函数作为子组件 四、最佳实践 在 React 开发中…

科研绘图系列:R语言组合热图和散点图

介绍 热图展示参与者的属性,散点图表示样本的时间跨度。 加载R包 library(tidyverse) library(ComplexHeatmap) library(circlize) library(cowplot)导入数据 数据可从以下链接下载(画图所需要的所有数据): 百度云盘链接: https://pan.baidu.com/s/1iEE9seTLdrrC3WDHJy…

P2p网络性能测度及监测系统模型

P2p网络性能测度及监测系统模型 网络IP性能参数 IP包传输时延时延变化误差率丢失率虚假率吞吐量可用性连接性测度单向延迟测度单向分组丢失测度往返延迟测度 OSI中的位置-> 网络层 用途 面相业务的网络分布式计算网络游戏IP软件电话流媒体分发多媒体通信 业务质量 通过…

富唯智能转运机器人:高效、智能、未来的选择

在现代工业中,高效的物流和物料处理是提升生产效率的关键。富唯智能转运机器人,以其卓越的技术和智能化的设计,为各行业提供了完美的解决方案。 产品概述 富唯智能转运机器人搭载ICD系列核心控制器,拥有多种移载平台&#xff0c…

学习记录day18——数据结构 算法

算法的相关概念 程序 数据结构 算法 算法是程序设计的灵魂,结构式程序设计的肉体 算法:计算机解决问题的方法护额步骤 算法的特性 1、确定性:算法中每一条语句都有确定的含义,不能模棱两可 2、有穷性:程序执行一…

Kafka知识总结(基本介绍+基本概念)

文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 消息队列应用场景: 通过异步处理提高系统性能&#xf…

3GPP眼中的XR及其技术特点

3GPP R18 支持了XR Services。XR需要高数据速率和低延迟通信,这也真是5G可以大展身手的地方。这篇就从3GPP的角度看下XR是什么以及XR有哪些技术特点。 Extended Reality (XR) 是指由计算机技术和可穿戴设备生成的所有现实与虚拟相结合的环境和人机交互技术。 实际上…

【相机与图像】1. 相机模型的介绍:内参、外参、畸变参数

想着整理下相机模型(内容上参考 slam十四讲)、相机的内外参标定。方便自己的使用和回顾。 不过,内外参标定啥时候记录随缘 -_- 概述 【构建相机模型】 相机将三位世界中的坐标点(单位为米)映射到二维图像平面&#xff…

项目实战二

Git 服务器 公共代码平台GitLab 配置gitlab 1.设置管理员帐号密码 2.让程序员传代码到20主机上需要配置: 创建用户 mark 1234.com 创建用户组devops 然后把mark 添加到devons 创建项目 http://192.168.88.20/devops/myproject.git 3.客户端操作&#x…

大数据、区块链与人工智能

大数据、区块链与人工智能:技术融合与未来展望 摘要 本文旨在探讨大数据、区块链和人工智能这三个技术领域的基本概念、发展历程、应用场景及其相互之间的融合。文章首先分别介绍这三个技术的定义和特点,然后分析它们在不同行业中的实际应用&#xff0…

mac下010editor的配置文件路径

1.打开访达,点击前往,输入~/.config 2.打开这个文件夹 把里面的 010 Editor.ini 文件删除即可,重新安装010 Editor即可

SpringSecurity如何正确的设置白名单

在SpringSecurity中,往往需要对部分接口白名单访问,而大部分在使用Security中就有一个误区,那就是免鉴权访问和白名单的区别。 大部分的Security文章包括官方文档给出免鉴权访问都是使用.permitAll()去对相应路径进行免鉴权访问,但实际上这仅仅只表示该资源不需要相应的权限访问…

k8s 公共服务

修改named.conf。修改第13行和第21行 下面是 named.rfc1912 修改位置,在最后 所以用cp -p 复制文件,保留权限 nslookup 回车,server是看哪个dns 在起作用 dns服务器要配置给所有公共服务节点和 k8s 节点 就在网络文件加个DNS2就行了&…

【人工智能】AI音乐创作兴起与AI伦理的新视角

文章目录 🍊AI音乐创作:一键生成,打造你的专属乐章🍊1 市面上的AI音乐应用1.1 Suno AI1.2 网易天音 🍊2 AI音乐创作的流程原理(直接制作可跳到第3点)2.1 AI音乐流派2.2 AI音乐风格2.3 AI音乐的结构顺序2.5 选择AI音乐乐…

AI学习记录 - 激活函数的作用

试验,通过在线性公式加入激活函数,可以拟合复杂的情况(使用js实现) 结论:1、线性函数的叠加,无论叠加多少次,都是线性的 如下图 示例代码 线性代码,使用ykxb的方式,叠加10个函数…

前端:Vue学习-3

前端:Vue学习-3 1. 自定义指令2. 插槽2.1 插槽 - 后备内容(默认值)2.2 插槽 - 具名插槽2.3 插槽 - 作用域插槽 3. Vue - 路由3.1 路由模块封装3.2 声明式导航 router-link 高亮3.3 自定义匹配的类名3.4 声明式导肮 - 跳转传参3.5 Vue路由 - 重…

这6款Python IDE代码编辑器,你都用过吗?

工欲善其事,必先利其器,选择编辑器或IDE(集成开发环境)是学习python编程的第二件大事。 Python开发工具有很多,诸如IDLE、Pycharm、Spyder、EclipsePydev、VScode、Wing、Jupyter等,可以说各有千秋。 新手…