欢迎光临
我们一直在努力

MySQL5.7的InnoDB架构

MySQL5.7的InnoDB架构可以分为两部分:内存架构和磁盘架构。
MySQL5.7的InnoDB架构

  • 缓冲池是主内存中的一个区域,用于在 InnoDB访问表和索引数据时对其进行缓存。
  • 缓冲池允许直接从内存中访问经常使用的数据,从而加快处理速度。
  • 在专用服务器上,多达 80% 的物理内存通常分配给缓冲池。
  • 变更缓冲区是一种特殊的数据结构,当这些页不在缓冲池中时 ,它会缓存对二级索引页的更改。
  • 可能由INSERTUPDATE 或 DELETE 操作 (DML) 导致的缓冲更改,然后会在其它读取操作将页加载到缓冲池中时合并。
  • InnoDB会监控对表上各索引页的查询,如果对应的数据被访问的频次符合规则,那么就建立哈希索引来加快数据访问的速度,这个就叫做自适应哈希索引。
  • 哈希索引是针对经常访问的索引页的需求而构建的。
  • 日志缓冲区是保存要写入磁盘上日志文件的数据的内存区域。
  • 日志缓冲区的内容会定期刷新到磁盘。
    • 可以通过更改innodb_flush_log_at_trx_commit参数来控制日志缓冲区的内容如何写入和刷新到磁盘。

      MySQL5.7的InnoDB架构

    • innodb_flush_log_at_timeout参数可以控制日志刷新频率。
  • 大型日志缓冲区使大型事务能够运行,而无需在事务提交之前将重做日志数据写入磁盘。
  • 如果有更新、插入或删除许多行的事务,增加日志缓冲区的大小可以节省磁盘 I/O。
  • 系统表空间是 InnoDB数据字典、双写缓冲区、更改缓冲区和回滚日志的存储区域。
  • 如果表是在系统表空间而不是 file-per-table 或通用表空间中创建的,它还可能包含表和索引数据。

file-per-table 表空间包含单个 InnoDB表的数据和索引,并存储在文件系统中的单个数据文件中。

通用表空间InnoDB 是使用CREATE TABLESPACE语法创建的共享表空间。

回滚表空间包含回滚日志,它们是记录的集合,其中包含有关如何回滚事务对聚集索引记录的最新更改的信息。

回滚日志默认存储在系统表空间中,但可以存储在一个或多个撤消表空间中。

  • 里面存储着临时表或临时查询结果集的数据。
  • 临时表空间在正常关闭或中止初始化时被删除,并在每次服务器启动时重新创建。
  • 临时表空间在创建时会收到一个动态生成的空间ID。
  • 如果无法创建临时表空间,则拒绝启动。
  • 如果服务器意外停止,则不会删除临时表空间。在这种情况下,数据库管理员可以手动删除临时表空间或重新启动服务器,服务器会自动删除并重新创建临时表空间。
  • 临时表空间不能驻留在原始设备上。

InnoDB数据字典由内部系统表组成,其中包含用于跟踪表、索引和表列等对象的元数据 。

元数据物理上位于InnoDB系统表空间中。由于历史原因,数据字典元数据在某种程度上与存储在 InnoDB表元数据文件(.frm文件)中的信息重叠。

  • 双写缓冲区是一个存储区域,在 InnoDB将页写入 InnoDB数据文件中的适当位置之前,将从缓冲池中刷新的页写入其中。
  • 如果在页写入过程中出现操作系统、存储子系统或意外的mysqld进程退出, InnoDB则可以在崩溃恢复期间从双写缓冲区中找到该页的良好副本。
 收藏 (0) 打赏

您可以选择一种方式赞助本站

支付宝扫一扫赞助

微信钱包扫描赞助

除特别注明外,本站所有文章均基于CC-BY-NC-SA 4.0原创,转载请注明出处。
文章名称:《MySQL5.7的InnoDB架构》
文章链接:https://www.xpn.cc/843/fy.html
分享到: 更多 (0)

热门推荐

评论 抢沙发

登录

忘记密码 ?