mysql磁盘管理_mysql8 参考手册--InnoDB磁盘I/O和文件空间管理

作为DBA,您必须管理磁盘I / O以防止I / O子系统饱和,并管理磁盘空间以避免填满存储设备。该ACID设计模型需要一定量的I / O可能似乎是多余的,但有助于确保数据的可靠性。在这些约束条件下, InnoDB尝试优化数据库工作和磁盘文件的组织,以最大程度地减少磁盘I / O的数量。有时,I / O会推迟到数据库不忙之前,或者直到所有内容都需要进入一致状态为止,例如在快速关闭后重新启动数据库期间。

讨论默认类型的MySQL表(也称为InnoDB表)对I/O和磁盘空间的主要注意事项 :

控制用于提高查询性能的后台I / O数量。

启用或禁用可提供额外耐用性的功能,但需要付出额外的I / O代价。

将表组织成许多小文件,一些大文件或两者的组合。

使重做日志文件的大小与日志文件已满时发生的I / O活动保持平衡。

如何重组表以获得最佳查询性能。

InnoDB磁盘I/O

InnoDB在可能的情况下使用异步磁盘I / O,方法是创建多个线程来处理I / O操作,同时允许其他数据库操作在I / O仍在进行时继续进行。在Linux和Windows平台上,InnoDB使用可用的OS和库函数来执行“ 本机 ”异步I / O。在其他平台上,InnoDB仍然使用I / O线程,但是这些线程实际上可能会等待I / O请求完成。这种技术称为“ 模拟 ” 异步I / O。

预读

如果InnoDB可以确定很快有可能需要数据的可能性很大,它将执行预读操作将数据带入缓冲池,以便在内存中可用。对连续数据发出几个大的读取请求可能比发出几个小的散布请求更为有效。有两种预读启发式InnoDB:

在顺序预读中,如果InnoDB 注意到对表空间中某个段的访问模式是顺序的,则它会将一批数据库页的读取提前发布到I / O系统。

在随机预读中,如果InnoDB注意到表空间中的某些区域似乎正在被完全读入缓冲池,则它将剩余的读操作发布到I / O系统。

双写缓冲区

InnoDB使用一种新颖的文件刷新技术,该技术涉及一种称为doublewrite缓冲区的结构,该结构 在大多数情况下默认为启用(innodb_doublewrite=ON)。它增加了崩溃或停电后的恢复安全性,并通过减少fsync()操作需求来提高大多数Unix版本的性能。

在将页面InnoDB 写入数据文件之前,首先将它们写入称为doublewrite缓冲区的存储区域。仅在完成对双InnoDB写缓冲区的写入和刷新之后,才将页面写入数据文件中的相应位置。如果在页面写入过程中发生操作系统,存储子系统或 mysqld进程崩溃(导致页面损坏的 情况),InnoDB则稍后可以在恢复期间从doublewrite缓冲区中找到该页面的良好副本。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值