ITPub博客

首页 > 数据库 > > 14.6.5 配置 InnoDB 变更 buffering

14.6.5 配置 InnoDB 变更 buffering

作者:飘絮絮絮丶 时间:2020-05-12 10:02:04 0 删除 编辑

参考官方文档:

dev.mysql.com/doc/refma



当在表上执行INSERT,UPDATE和DELETE操作时,索引列的值(特别是辅助键的值)通常是未排序的顺序,需要大量的I / O才能使辅助索引保持最新状态。 InnoDB有一个更改缓冲区,当相关页面不在缓冲池中时,缓存对辅助索引条目的更改,从而避免了从磁盘立即读取页面中的昂贵I / O操作。 缓存的更改在页面加载到缓冲池时合并,并且更新的页面稍后刷新到磁盘。 InnoDB主线程在服务器几乎空闲时以及缓慢关闭期间合并缓存的更改。



因为它可能导致更少的磁盘读取和写入操作,所以对于I/O绑定的工作负载,更改缓冲区功能是最有价值的,例如具有大量DML操作(例如批量插入)的应用程序。


但是,更改缓冲区占用了缓冲池的一部分,减少了可用于缓存数据页的内存。 如果工作集几乎适合缓冲池,或者如果您的表具有相对较少的二级索引,则禁用更改缓冲可能会很有用。 如果工作集完全适合缓冲区,更改缓冲不会带来额外的开销,因为它仅适用于不在缓冲池中的页。


您可以使用innodb_change_buffering配置参数来控制InnoDB执行更改缓冲的范围。 您可以启用或禁用缓冲插入,删除操作(索引记录最初标记为删除时)和清除操作(索引记录物理删除时)。 更新操作是插入和删除的组合。 缺省的innodb_change_buffering值是all。


允许的innodb_change_buffering值包括:

  • all

默认值:缓冲插入,删除标记操作和清除。

  • none

不缓冲任何操作

  • inserts

缓冲插入操作

  • deletes

缓冲删除-标记操作

  • changes

缓冲 插入和删除-标记操作

  • purges

缓冲在后台发生的物理删除操作。


您可以在MySQL选项文件(my.cnf或my.ini)中设置innodb_change_buffering参数,或使用需要SUPER特权的SET GLOBAL命令动态更改它。 更改设置会影响新操作的缓冲; 现有缓冲条目的合并不受影响。


14.6.5.1 配置变更缓冲最大大小


从MySQL 5.6.2开始,使用innodb_change_buffer_max_size配置选项可以将更改缓冲区的最大大小配置为缓冲池总大小的百分比。 默认情况下,innodb_change_buffer_max_size被设置为25.最大设置为50。


您可能会考虑在具有大量插入,更新和删除活动的MySQL服务器上增加innodb_change_buffer_max_size,其中更改缓冲区合并跟不上新的更改缓冲区条目,导致更改缓冲区达到其最大大小限制。


您可能会考虑在用于报告的静态数据的MySQL服务器上减少的innodb_change_buffer_max_size,或者如果更改缓冲区消耗了与缓冲池共享的太多内存空间,导致页面比期望的更早退出缓冲池。


使用代表性工作负载测试不同的设置以确定最佳配置。 innodb_change_buffer_max_size设置是动态的,它允许您在不重新启动服务器的情况下修改设置。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69946831/viewspace-3139306/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-09-09

  • 博文量
    2646
  • 访问量
    42342