mysql 内部结构_Mysql 内部结构(简)

引擎

728d4aabde4a86a50c687cab2fe996f9.png

InnoDb内存结构

内存结构包括Buffer Pool,Change Buffer,Adaptive Hash Index和Log buffer四块。

Buffer Pool

缓冲池,BP内部以Page为单位,默认为16K,BP底层采用链表管理Page,Innodb访问表记录和索引时会在Page中缓存,后续先缓存,未命中再IO。

Page分为Free page(空闲)、clean page(inserted的数据)和dirty page(updated,和磁盘不一致)。对应维护和管理的链接结构为free list(管理Free pagfe)、LRU list(管理clean page和 dirty page)和flush list(管理dirty page,内部按修改的时间顺序)

通过“show engine innodb status;”可查询内部结构(容量大小单位为page)

0baa73eb9bc2f9e08a7f8c6ef98b720c.png

show  variables like '%innodb_page_size%';  (select @@innodb_page_size)

4407ad7fa7a35f633028cc066b9afa66.png

LRU list(Latest Recent  Used)

传统的LRU 算法才用链表以Used为维度来实现的。采用末尾淘汰。Innodb中的LRU稍微做了优化,加入了一个分界线(midpoint),mid之前的位置为new区(活跃),之后为old区(未活跃),避免扫表操作,空间比例为6:4(63:37),数据的new-old之间的移动,通过time(1秒)机制来回刷新。

show  variables like '%innodb_old%';

023b9b8982b4cbd20b0ef4e990630b5c.png

show  variables like '%innodb_buffer%'; innodb_buffer_pool_chunk_size参数为5.7开始新增的,旧的版本不能动态配置。pool_size = instances * chunk_size

63834d67d2e6f968746d601a5851e423.png

Change Buffer

写缓存区。默认占Buffer pool的25%空间,最大为50%。

show variables like '%innodb_change_buffer_max_size%';

5948496cc3aef920b7073a6cd7549810.png

Log Buffer

日志缓冲区,用于保存要写入磁盘的log文件(redo/undo),log buffer会定期或空间满时自动刷新到磁盘上。 整个过程为Log buffer --> OS Cache --> 磁盘文件两步。可以通过设置'innodb_flush_log_at_trx_commit'参数控制日刷新行为。

show variables like '%innodb_log%';

d402f63cac20095eff370bd96c6502c8.png

12296bc8feb537e46a5f5908be03f760.png

默认1秒刷新一次日志文件,at_trx_commit值为0、1、2

0:每隔一秒写日志文件和刷盘操作。

1:事物提交后,立刻插即写日志文件和刷盘。

2:事物提交后,立刻写日志文件,每隔1秒进行刷盘操作。(推荐)。

磁盘结构

Mysql磁盘结构主要包括表空间和日志文件。

Namespace

系统表空间:包括数据字典、双写缓冲区、写缓冲和Undo logs。

独立表空间:创建表存在于独立表空间,通过设置innodb_file_per_table=on,开启使用独立的表空间。文件格式为.ibd。

通用表空间:也可存放数据表,创建表时指定的namespace ,会存放在通用表空间。

临时表空间:用户临时空间,mysql服务关闭后,会移除该空间。

undo表空间:5.7之后独立出来,旧版本存放于系统表空间中。

Mysql 8.0之后,磁盘做了很多调整,系统表空间里只有Chang buffer部分了。数据字典、双鞋缓冲区和Undo logs都有自己的独立表空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值