mysql 执行流程 redolog undolog binlog

本文详细介绍了SQL执行的全过程,包括连接器如何管理客户端连接、查询缓存的工作原理、SQL语句的分析与优化过程,以及InnoDB存储引擎下的Redolog、Undolog与Server层的Binlog之间的区别和作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

一条sql的执行流程见下图:

连接器:

负责跟客户都建立连接、获取权限、维持和管理连接。

  • 用户名、密码验证
  • 查询权限信息、分配对应的权限
  • 可以使用 show processlist 查看现有的连接
  • 如果长时间没有动静,会字段断开连接,通过 wati_timeout 控制,默认 8 小时 

查询缓存

  • 当执行 sql 查询语句的时候,会先去查询缓存中查看结果,之前执行过的  sql 语句及其结果可能以 key-value 的形式存储在缓存中。如果能找到则直接返回,如果找不到则执行后边的阶段。
  • 但是不推荐使用查询缓存----》 a、查询缓存失效比较频繁(只要表更新,缓存就会清空),频繁 IO 。b、缓存对应新更新的数据命中率比较地

分析器

  • 词法分析:Mysql 需要把输入的字符串进行识别每个部分代表什么意思?    把字符串 T 识别成表名 T ;字符串 ID 识别成 列 ID
  • 语法分析:根据语法规则判断这个 sql 语句是否满足mysql 的语法,如果不符合报错 “You have an error in your SQL synta”。

优化器

在具体执行 sql 语句之前,要先经过优化器的处理

  • 当表中有多个索引时,决定用哪个索引
  • 当sql 需要多表关联时,决定表的连接顺序

不同的执行方式对 sql 语句的执行效率影响很大

  • RBO 基于规则的优化
  • CBO 基于成本的优化

Redo log (事务日志) —— Innodb 存储引擎的日志文件

  1. 记录的是数据库中每个页的修改,可以用来恢复提交后的物理数据页(恢复数据页,且只能恢复到最后一次提交的位置,因为修改会覆盖之前的)
  2. 当发生数据修改的时候,innodb引擎会先把记录写入 redo log 中,并更新内存,此时更新就算完成了。同时innodb引擎会在合适的时机将记录写到磁盘中
  3. Redo log 是固定大小的,是循环写的过程
  4. 有了 redolog之后,innodb 可以保证即使数据库发生异常重启,之前的记录也不会丢失,叫做 crash-safe

undo log (回滚日志) —— Innodb 存储引擎的日志文件

  1. undolog 保证事务的原子性,还用undolog日志实现多版本并发控制简称 MVCC
  2. 在操作数据库之前,先将数据备份到 undolog 文件中。然后进行数据的修改,如果出现错误或用户执行 ROLLBACK 语句,系统可以通过 undolog 中的备份数据恢复到事务开始之前的数据。
  3. undolog的执行逻辑可以理解为:
  • 当 delete 一条记录时,undolog 记录一条对应的 insert 语句
  • 当 insert 一条记录时,undolog 记录一条对应的 delete  语句
  • 当 update 一条记录时,undolog 记录一条对应的返 update 语句

binlog (归档日志) —— 服务端日志文件

binlog主要用作主从同步和数据库基于时间点的还原。

Binlog 是 Server 层的日志文件,主要做mysql功能层面的事情,与 Redolog 的区别

  1. redolog 是innodb独有的,binlog 所有引擎都可以用
  2. redolog 是物理日志,记录数据页上的修改,binlog是逻辑日志,记录的是这个语句的原始逻辑
  3. redolog 是循环写的,空间会用完。binlog 是可以追写的,不会覆盖之前的日志信息

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值