MySQL之InnoDB存储结构

在这里插入图片描述

该图是MySQL官方提供的内存结构图版本为5.7


内存结构

Buffer Pool 缓冲池

  • 生产中innodb_buffer_pool_size设置大小:
    • 如果mysql部署在独立服务器,建议设置为80%。反之设置为剩余内存的80%~90%
    • 查看命令 show variables like ‘%innodb_buffer%’;

Change Buffer 写缓冲区

  • 默认占据Buffer_pool 25% 的空间,最大支持50%,具体根据业务进行调整,如果写多读少,可以适当调大。-> innodb_change_buffer_max_size
  • 查看命令:show variables like ‘%innodb_change_buffer_max_size%’;
  • 设置命令:set global innodb_change_buffer_max_size = 30;
  • 当更新一条数据时,该数据存在于Buffer Pool,直接在Buffer Pool修改即可,一次内存操作。如果该数据在Buffer Pool中不存在(未命中),则会直接在Change Buffer进行一次内存操作,当下次查询时,会先去磁盘读取,然后再从Change Buffer中读取数据进行合并,最终载入Buffer Pool中。
  • Change Buffer,仅适用于非唯一索引页。
    • 因为如果索引设置了唯一性,在进行修改时,InnoDB机制必须要做唯一性校验,也就是说必须要查询磁盘,需要做一次IO操作。此时会直接将数据查询到Buffer Pool中,然后在缓冲池修改,不会在进行Change Buffer操作。

Log Buffer 日志缓冲区

  • 查询命令:
  • show variables like ‘%innodb_log%’;
    • 查看Log Buffer 大小和磁盘日志文件大小和个数
      • 默认Log Buffer大小为16MB
      • 默认磁盘单个日志文件大小为48MB,个数为 2 个
  • 查询写文件和刷盘行为命令:
  • show variables like ‘%innodb_flush_log%’;
    • 写文件指Log Buffer向Operationing System Cache(OS Cache)中写入的过程
    • 刷盘指OS Cache向磁盘中写入的过程
  • innodb_flush_log_at_trx_commit
    • 0:每隔1秒执行写日志文件和刷盘操作,最多丢失1秒数据
    • 1:事务提交,立刻写日志和刷盘,数据不丢失,但是频繁进行IO操作(默认为 1
    • 2:事务提交,立刻写日志操作,每隔1秒进行刷盘操作

磁盘结构

System Tablespace 系统表空间

  • 查看命令:show variables like ‘%innodb_data_file_path%’;
    • ibdata1:12M:autoextend 指文件名:ibdata1,大小12M,自动扩充
    • InnoDB Data Dictionary 数据字典
      • 有内部系统表构成,存储元数据用
    • Doublewrite Buffer 双写缓冲区
      • 再Buffer Pool真正的写入其他表之前,先把page页中的脏页写到双写缓冲区。作用有两个,一是可以提高写入速度,二是在发生意外时可以从双写缓冲区中找回丢失数据,做到双保险。双写缓冲区默认是开启的
      • 相关命令:
        • 查看是否开启:show variables like ‘%innodb_doublewrite%’;
        • 查看刷盘策略:show variables like ‘%innodb_flush_method%’;
          • 默认值为NULL
          • 在Unix系统下建议设置为 O_DIRECT 可以提高刷盘效率
    • Undo Logs
      • 在Undo Tablespaces中存在多个undo_0x文件,在事务开启之前,对没有被修改的原始数据做备份,用于意外情况下回滚事务用。
    • Redo Log 重做日志
      • 数据库宕机重启后,会将Redo Log中的数据恢复到数据库中,再根据Undo Log日志决定事务回滚还是提交,mysql是以循环的方式写入重做日志文件。重做日志文件
        默认是两个文件,单个48M。

其他章节 -> 跳转

end...
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

s_wei_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值