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

MySQL 核心知识点梳理(2)

目录

数据库架构

12.MySQL的基础架构

binlog主要在服务层,负责记录sql语句的变化

13.一条查询语句的执行

14.一条修改语句的执行

15MySQL的段区页行

16MySQL常见的存储引擎对比

17 InnoDB的内存结构

数据页结构

18 MySQL中Undolog,redolog和binlog

有了binlog为什么还需要redolog和undolog

 说说redolog的工作机制

19WAL

20为什么要实现2阶段提交呢?

21XID

22RedologBuffer 是顺序写


数据库架构

12.MySQL的基础架构

MySQL 采用分层架构,主要包括连接层、服务层、和存储引擎层。

①、连接层主要负责客户端连接的管理,包括验证用户身份、权限校验、连接管理等。可以通过数据库连接池来提升连接的处理效率。

②、服务层是 MySQL 的核心,主要负责查询解析、优化、执行等操作。在这一层,SQL 语句会经过解析、优化器优化,然后转发到存储引擎执行,并返回结果。这一层包含查询解析器、优化器、执行计划生成器、日志模块等。

③、存储引擎层负责数据的实际存储和提取。MySQL 支持多种存储引擎,如 InnoDB、MyISAM、Memory 等。

binlog主要在服务层,负责记录sql语句的变化

13.一条查询语句的执行

1.客户端发送sql语句到mysql

2.mysql服务器的连接器开始和客户端进行连接,进行权限校验等操作

3.解析器对语句进行解析是否符合sql语法规则,数据库也没有这个列名

4.优化器负责优化sql语句

5.执行器调用存储引擎的api进行数据的读写

6.存储引擎负责查询数据,并将执行结果返回给客户端。客户端接收到查询结果,完成这次查询请求。

14.一条修改语句的执行

Client客户端:

  1. 客户端通过tcp/ip发送一条sql语句到server层

Server层:

  1. 接收客户端过来的请求,进行权限验证
  2. 权限验证通过后,解析器会对SQL语句进行词法、语法分析等
  3. 经过验证解析的SQL语句会在优化器生成选择最优执行计划
  4. 然后执行器将会执行经过优化的SQL语句

InnoDB引擎部分

  1. 先从buffer pool读取数据页,如果没有再去磁盘里面读取。
  2. 开启事务,在提交修改之前,记录之前的数据到undo log日志,这个是用于回滚。
  3. 然后开始更新记录,更新到buffer pool中,bufferpool在刷盘到磁盘中,为防止刷盘过程中服务挂掉或者其他原因引起的数据丢失。会把更新的记录存到redo log日志中,此时事务的状态是prepare。
  4. 这个时候更新就完成了,当时脏页不会立即写入磁盘,而是由后台线程完成。
  5. 通知Server层,可以正式提交数据,把这个修改记录到bin log日志文件中。
  6. commit阶段,这个阶段是将redo log中事务状态标记为commit
  7. 事务提交之后刷盘。

15MySQL的段区页行

MySQL 是以表的形式存储数据的,而表空间的结构则由段、区、页、行组成。

①、段:表空间由多个段组成,常见的段有数据段、索引段、回滚段等。

②、区:段由一个或多个区组成,区是一组连续的页,通常包含 64 个连续的页,也就是 1M 的数据。

③、页:页是 InnoDB 存储数据的基本单元,标准大小为 16 KB,索引树上的一个节点就是一个页。

④、行:InnoDB 采用行存储方式,意味着数据按照行进行组织和管理

使用区而非单独的页进行数据分配可以优化磁盘操作,减少磁盘寻道时间,特别是在大量数据进行读写时

16MySQL常见的存储引擎对比

功能InnoDBMyISAMMEMORY
支持事务YesNoNo
支持全文索引YesYesNo
支持 B+树索引YesYesYes
支持哈希索引YesNoYes
支持外键YesNoNo

①、MySQL 5.5 之前,默认存储引擎是 MyISAM,5.5 之后是 InnoDB。

②、InnoDB 支持的哈希索引是自适应的,不能人为干预。

③、InnoDB 从 MySQL 5.6 开始,支持全文索引。

④、InnoDB 的最小表空间略小于 10M,最大表空间取决于页面大小。

InnnoDB支持表级锁和行级锁,MylSAM只支持表级锁

InnoDB是聚簇索引,MylSAM是非聚簇索引

17 InnoDB的内存结构

InnoDB 的内存区域主要有两块,buffer pool 和 log buffer。 buffer pool 用于缓存数据页和索引页,提升读写性能;log buffer 用于缓存 redo log,提升写入性能

Buffer Pool 是 InnoDB 存储引擎中的一个内存缓冲区,它会将经常使用的数据页、索引页加载进内存,读的时候先查询 Buffer Pool,如果命中就不用访问磁盘了。

写操作时不会直接写入磁盘,而是先修改内存中的页,此时页被标记为脏页,后台线程会定期将脏页刷新到磁盘。

Buffer Pool 可以显著减少磁盘的读写次数,从而提升 MySQL 的读写性能。

数据页结构

18 MySQL中Undolog,redolog和binlog

binlog是个二进制二进制文件,主要记录了所有修改数据库的sql语句,是一种服务层逻辑日志,如果误删,就可以用binlog日志进行回退

redolog记录对于 InnoDB 表的每个写操作,不是 SQL 级别的,而是物理级别的,主要用于崩溃恢复。

Undolog记录数据被修改前的值,用于事务的回滚。

有了binlog为什么还需要redolog和undolog

binlog 属于 Server 层,与存储引擎无关,无法直接操作物理数据页。而 redo log 和 undo log 是 InnoDB 存储引擎实现 ACID 的基石。

binlog 关注的是逻辑变更的全局记录;redo log 用于确保物理变更的持久性,确保事务最终能够刷盘成功;undo log 是逻辑逆向操作日志,记录的是旧值,方便恢复到事务开始前的状态。

 说说redolog的工作机制

首先开启事务,MySQL会为该事物分配一个唯一的标识符

在事务执行过程中,进行一次修改就会生成一个Redolog,记录修改前后的数据

这些Redolog会先进入Redolog buffer

当事务提交时,MySQL 再将 Redo Log Buffer 中的记录刷新到磁盘上的 Redo Log 文件中。

只有当 Redo Log 成功写入磁盘,事务才算真正提交成功。

redolog的大小是固定的,使用环形的方法写入`,满了就会把最早的给覆盖掉,为了避免覆盖没有持久化的,会定期执行checkPoint,把内存的数据页刷到磁盘,然后记录checkPoint点,重启时,MySQL 只会重放 CheckPoint 之后的 Redo Log,从而提高恢复效率。

19WAL

WAL就是Write AheadLogging 预写日志

就是先写日志,在刷磁盘.修改数据页之前,先将修改记录写入 Redo Log。这样的话,即使数据页尚未写入磁盘,系统崩溃时也能通过 Redo Log 恢复数据。

20为什么要实现2阶段提交呢?

为了保证 redo log 和 binlog 中的数据一致性,防止主从复制和事务状态不一致

比如在redolog 之后、写入 binlog 之前崩溃。那么 MySQL 重启后 InnoDB 会回滚该事务,因为 redo log 不是提交状态。并且由于 binlog 中没有写入数据,所以从库也不会有该事务的数据

 MySQL 在写入 binlog 之后、redo log 提交之前崩溃。那么 MySQL 重启后 InnoDB 会提交该事务,因为 redo log 是完整的 prepare 状态。并且由于 binlog 中有写入数据,所以从库也会同步到该事务的数据。

21XID

XID 是 binlog 中用来标识事务提交的唯一标识符。

XID 可以帮助 MySQL 判断哪些 redo log 是已提交的,哪些是未提交需要回滚的,是两阶段提交机制中非常关键的一环。还用于主从复制中事务完整性的判断,也在崩溃恢复中对 redo log 和 binlog 的一致性校验起到关键作用。

22RedologBuffer 是顺序写

http://www.xdnf.cn/news/16106.html

相关文章:

  • C++ 分配内存释放内存
  • 深度学习 ---神经网络以及数据准备
  • 清理磁盘空间
  • LiteCoT:难度感知的推理链压缩与高效蒸馏框架
  • NISP-PTE基础实操——代码审计
  • 从实践出发--探究C/C++空类的大小,真的是1吗?
  • 微店关键词搜索接口深度开发指南
  • 有关Maven的个人笔记总结
  • ssh2-sftp-client 简化 sftp 文件传输的 node库
  • python实现接收九数云的异常分析指标推送通知
  • C++基础数据结构
  • Java IO 流详解:从基础到实战,彻底掌握输入输出编程
  • A316-HF-DAC-V1:专业USB HiFi音频解码器评估板技术解析
  • 牛客网题解 | 单词识别
  • 关于Ajax的学习笔记
  • 二叉树实现堆,咕咕咕
  • 结构型模式-架构解耦与扩展实践
  • Linux的目录
  • stream event
  • 软文发布平台推荐指南,软文发稿平台该怎么选?
  • 网络协议(三)网络层 IPv4、CIDR(使用子网掩码进行网络划分)、NAT在私网划分中的应用
  • Axios
  • Qt中的网络通信
  • javaSE(从0开始)day13
  • 通过TPLink路由器进行用户行为审计实战
  • 【图像处理基石】什么是相机的内外参数?
  • springcloud -- 微服务02
  • 关于 URL 中 “+“ 号变成空格的问题
  • 数据结构:找出字符串中重复的字符(Finding Duplicates in a String)——使用哈希表
  • HTTP性能优化实战技术详解(2025)