一条sql是怎么执行的

本文详细解析了MySQL中的Buffer Pool机制,包括数据页、free链表、哈希表、flush链表和LRU链表。此外,还介绍了redo log和binlog在事务处理中的角色,以及两阶段提交的执行流程,强调了它们对于crash-safe能力的重要性。
摘要由CSDN通过智能技术生成

基本架构图

架构图

BuffPool

作用: 缓存表数据与索引数据,把磁盘上的数据加载到缓冲池,避免每次访问都进行磁盘IO,起到加速访问的作用

在这里插入图片描述

牵扯的基本概念

数据页

在操作系统中,我们知道为了跟磁盘交互,内存也是分页的,一页大小4KB。同样的在MySQL中为了提高吞吐率,数据也是分页的,不过MySQL的数据页大小是16KB。(确切的说是InnoDB数据页大小16KB)

free链表

free链表就是存储的空闲缓存页的描述数据块的地址。它是一个双向链表,数据库刚启动的时候所有的缓存页都是空的,他们的描述数据都在free链表中。当需要将磁盘的数据页加载到缓存页时,就会在free链表中找到一个缓存页记录数据并写入描述数据,然后将其从free链表中去除。

缓存数据页的哈希表

执行sql的时候,先看用到的数据页有没有被缓存,如果已经被缓存就可以直接用了,那就需要知道哪些是已被缓存的。数据库里有一个哈希表数据结构,以表空间号+数据页号作为key,缓存页的地址作为value。当需要使用一个数据页的时候拿

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值