InnoDB引擎下SQL的执行流程

SQL执行流程
  1. 连接器
    1. 客户端连接驱动与mysql连接池连接 半双工通信
    2. 传入客户端的sql
  2. 查询缓存(8.0之后没有)
    1. 删除原因
      1. 如果每次查询条件不同导致命中率低
      2. 没有命中缓存 创建新缓存
      3. 在创建缓存的时候会添加表级锁
      4. 缓存更新需要批量失效
  3. sql解析器
    1. 对传入的sql
      1. 词法分析 分解成各种token systembos[]
      2. 语法分析 bison 语法分析器
      3. 生成语法树
  4. sql预处理器
    1. 提交sql模板语句
    2. 提交参数执行
  5. 优化器
    1. 基于成本的优化器cbo
    2. 成本指数据表 数据量索引等信息计算的sql语句对应的io消耗指
    3. 生成可执行的执行计划
  6. 执行器
    1. innodb
      1. undo log

      2. 首先将bufferpool中数据的旧值写入undo log中以支持回滚

      3. 然后将数据写入内存中的buffer pool

      4. redo log

      5. 将更新写入信息放入内存中的 redo log buffer

      6. 然后将更新写入信息 刷入磁盘中redo log

      7. bin log

      8. 变更历史查询 数据库备份恢复 主从复制等功能

      9. 在redo log 写入的同时进行binlog的写入操作

      10. 刷盘成功后告诉redolog日志 已提交

      11. 利用io线程在一些特定时机将内存中需要更新的数据读出同时写入磁盘 open+write函数 idb文件

      12. innodb 主要功能

      13. 对执行计划进行微事务拆分

      14. 在innodb查询相关的handler api 组合和调用

      15. 索引查询 遍历查询 构建临时表等流程

      16. 执行后将执行结果返客户端 tcp

image.png

Kimi 回答
  1. 首先对我们写的SQL语句进行优化
  2. 然后将优化后的执行计划传给存储引擎InnoDB
  3. 事务开始
    • 用户执行一个INSERT、UPDATE或DELETE语句,触发一个事务的开始。
    • InnoDB为事务分配一个唯一的事务ID。
  4. 数据修改
    • 用户的数据修改请求被发送到InnoDB存储引擎。
    • InnoDB首先检查要修改的数据页是否在缓冲池中。如果不在,就从磁盘读取到缓冲池。
    • InnoDB在缓冲池中的数据页上进行修改。
  5. Undo日志记录
    • 在修改数据之前,InnoDB将旧数据复制到Undo日志中。
    • Undo日志用于支持事务的回滚功能,以便在事务失败或用户执行回滚操作时恢复旧数据。
  6. Redo日志记录
    • InnoDB将数据的修改信息记录到Redo日志中。
    • Redo日志首先写入内存中的Redo日志缓冲区,然后在事务提交时刷新到磁盘上的Redo日志文件。
    • Redo日志用于在系统崩溃后恢复未提交的事务。
  7. 事务提交
    • 用户执行COMMIT语句,请求提交事务。
    • InnoDB将Redo日志缓冲区中的数据刷新到磁盘上的Redo日志文件。
    • InnoDB确保所有修改过的数据页都被标记为脏页,并将在适当的时候刷新到磁盘。
  8. 脏页刷新
    • InnoDB后台线程定期将缓冲池中的脏页刷新到磁盘上。
    • 脏页刷新是基于一定的策略和算法进行的,以确保数据的一致性和持久性。
  9. 事务结束
    • 一旦事务提交成功,并且所有相关的数据都被正确地写入到磁盘上,事务就结束了。
    • 用户可以继续执行其他事务或查询操作。

image.png

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值