Mysql磁盘结构 底层优化

本文详细介绍了MySQL的buffer pool结构,包括free链表、flush链表和LRU链表的工作原理。同时,讨论了事务处理中的redo log、bin log和undo log,以及MySQL如何在RR隔离级别下解决幻读问题,涉及到间隙锁和Next-Key Lock机制。
摘要由CSDN通过智能技术生成

buffer pool

sql 执行的时候,不管是select 还是update 都会把数据页 读取到buffer pool里面
buffer pool
buffer pool 其实是一个大的数组(默认128M)

buffer pool 操作(重点)

  • buffer pool里面的数组 并不是连续的(读进来被回收的时间点不一样造成的)
    所以就需要一个free链表 来管理 这些空白的节点
    free链表
    基节点 是不动的 包含<下个节点位置、尾节点位置、链表长度>
    后续的都是链表节点都是控制块(记录空白页的指针位置) 对空白页进行动态维护(链表的插入和删除操作速度很快)

  • 当执行update 语句的时候先会修改到buffer pool 内的数据,并把修改的那一页标识为脏页 (后台会有线程会定时操作把脏页刷到磁盘里面)
    所以会需要一个flush链表来记录脏页的记录,flush链表数据结构跟free链表基本一致。

  • 当buffer pool 刷满了之后,再来执行sql的时候,需要淘汰一部分数据(最近最少的数据页)所以需要一个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值