mysql内存结构

一:逻辑存储结构:表空间->段->区->页->行、

表空间:一个mysql实例对应多个表空间,用于存储记录,索引等数据。

段:分为数据段,索引段,回滚段。innoDB是索引组织表,数据段就是b+树的叶子节点,索引段就是b+树的非叶子节点。段用来管理多个区。

区:表空间的单元结构。每个区大小1M,默认情况下,innoDB存储引擎大小为16K,即一个区中一共有64个连续的区。

页:innoDB存储引擎磁盘管理的最小单元。每个页的大小默认16KB,为保证页的连续性,innoDB存储引擎每次从磁盘申请4-5个区。

行:就是数据,有两个隐藏字段:

Trx_id:每次对某条记录进行改动时,都会把对应的事务id赋值给trx_id隐藏列。

Roll_pointer:每次对某条引记录进行改动时,都会把旧的版本写入undo日志中,然后这个隐藏列就相当于一个指针,可以通过他来找到该记录修改前的信息。

二:内存架构:

主要是缓冲区:

1.buffer pool,缓冲池,主内存的一个区域,缓存磁盘上经常操作的真实数据,是增删改查首先操作数据的地方(如果没有数据则先从磁盘加载),在缓冲池修改完后再以一定频率刷新到磁盘,减少磁盘io,加快处理速度。由页组成,采用链表管理页,分为空闲页(未使用),被使用页(数据未被修改),脏页(数据被修改,与磁盘中数据不一致)

2.mysql8开始有change buffer(只针对非唯一的二级索引页),dml语句时,如果数据页没在buffer pool中,则先在change buffer中缓存数据的变更,未来读取数据的时候再合并恢复到buffer pool,然后刷新到磁盘。二级索引一般随机插入,dml操作会影响b+树中不相邻的二级索引页,造成大量磁盘io。change buffer可以在缓冲池中合并处理,减少磁盘io。

mysql5是inset buffer

3.自适应hash索引。优化buffer pool的数据查询。innoDB自动监控并根据情况创建hash索引提高速度。

4.log buffer ,日志缓冲区。保存要写入磁盘中的log日志数据(redo log,undo log),定期刷新到磁盘中

相关推荐

  1. mysql内存结构

    2024-05-25 23:23:11       15 阅读
  2. JVM内存结构

    2024-05-25 23:23:11       17 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-25 23:23:11       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-25 23:23:11       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-25 23:23:11       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-25 23:23:11       20 阅读

热门阅读

  1. 【Muduo】网络库框架模型和各模块简介

    2024-05-25 23:23:11       13 阅读
  2. C# 中的 Dictionary<TKey, TValue> 类

    2024-05-25 23:23:11       15 阅读
  3. docker system prune命令详解

    2024-05-25 23:23:11       12 阅读
  4. MySql开源闪回工具MyFlash

    2024-05-25 23:23:11       14 阅读
  5. 使用Python从网站API下载视频并转换为MP4文件

    2024-05-25 23:23:11       10 阅读
  6. Pytorch-03 数据集与数据加载器

    2024-05-25 23:23:11       13 阅读