取值范围:0,1,2

默认值:5.7版本为1, 8.0版本为0

含义:

设置为0时,表示刷脏页时不刷其附近的脏页。

设置为1时,表示刷脏页时连带其附近毗连的脏页一起刷掉。

设置为2时,表示刷脏页时连带其附近区域的脏页一起刷掉。1与2的区别是2刷的区域更大一些。

如果MySQL服务器磁盘是传统的HDD存储设备,打开该参数,能够减少I/O磁盘寻道的开销,提高性能,而对于SSD设备,寻道时间的性能影响很小,关闭该参数,反而能够分散写操作,提高数据库性能。由于SSD设备的普及,MySQL 8.0 将该参数的默认值由1调整为0。

innodb_flush_neighbors参数源码分析:

源码版本:5.7.19

在源码中,innodb_flush_neighbors 参数对应的变量为srv_flush_neighbors,这是一个全局变量,默认值为1,如下:

ulong srv_flush_neighbors = 1;

整个代码中,用到变量 srv_flush_neighbors 的地方只有一个,那就是函数 buf_flush_try_neighbors(),该函数位于源码文件:storage/innobase/buf/buf0flu.cc

buf_flush_try_neighbors() 函数主要逻辑,如下:

static ulint buf_flush_try_neighbors(

const page_id_t&  page_id,

buf_flush_t       flush_type,

ulint             n_flushed,

ulint             n_to_flush)

{

if (UT_LIST_GET_LEN(buf_pool->LRU) < BUF_LRU_OLD_MIN_LEN

|| srv_flush_neighbors == 0) {

// [low, high] 区间不包含邻近的页面

low = page_id.page_no();

high = page_id.page_no() + 1;

}else{

// [low, high] 区间包含邻近的页面

low = (page_id.page_no() / buf_flush_area) * buf_flush_area;

high = (page_id.page_no() / buf_flush_area + 1) * buf_flush_area;

if (srv_flush_neighbors == 1) {

...

// 根据 [low, high] 区间内的页是否可以刷盘,来进一步缩小 [low, high] 区间

}

}

...

// 根据 [low, high] 区间进行脏页刷盘

}

buf_flush_try_neighbors() 函数根据 [low, high] 区间来刷脏页。

当 srv_flush_neighbors 为 0时, [low, high] 只包含一个页面。

当 srv_flush_neighbors 为 1时, [low, high] 包含邻近的页面,页面数小于等于变量值buf_flush_area。

当 srv_flush_neighbors 为 2时, [low, high] 包含邻近的页面,页面数等于变量值buf_flush_area。

mysql innodb flus_MySQL参数解析innodb_flush_neighbors相关推荐

  1. 【数据库篇】MySQL InnoDB ibd 文件格式解析

    mysql innodb的表由.frm .ibd 组成,frm:存了每个表的元数据,包括表结构的定义等:ibd:存了每个表的元数据,包括表结构的定义等: 1.0 ibd文件基本结构 ibd文件由Tab ...

  2. mysql fast shutdown_MySQL参数解析 innodb_fast_shutdown

    作用范围:Global 动态修改:Yes 取值范围:0,1,2 默认值:1 innodb_fast_shutdown 参数用于设置MySQL InnoDB引擎的关闭模式. 设置为0时,InnoDB关闭 ...

  3. mysql --explicit_【MySQL】 explicit_defaults_for_timestamp 参数解析

    当该参数默认设置为OFF时,其行为如下: 在默认情况下,如果timestamp列没有显式的指明null属性,那么该列会被自动加上not null属性(而其他类型的列如果没有被显式的指定not null ...

  4. mysql recovery = 4_强制MySQL InnoDB恢复参数innodb_force_recovery

    强制InnoDB恢复 为了研究数据库页损坏,你能用SELECT - INTO OUTFILE从数据库中转储表.通常,以这种方式获得的大部分数据是完整的.严重的损坏可能导致SELECT* FROM tb ...

  5. mysql innodb monitor_MySQL innodb_table_monitor 解析

    背景: 用innodb_table_monitor来查看表内部的存储信息和索引结构是一个好的办法.再之前的MySQL 字符串主键和整型主键分析中提到了一些内容,但没有细讲,现在来好好的分析下. 使用方 ...

  6. MySQL InnoDB的缓冲池之预读失效和缓存池污染

    InnoDB的缓存池作用: 缓存表数据和索引数据,把磁盘上的数据加载到缓冲池中,避免每次都进行磁盘IO,起到加速访问的效果. LRU算法(Least recently used): 把入缓存池的页放在 ...

  7. mysql innodbmaxdirtypagespct_MySQL参数解析innodb_max_dirty_pages_pct

    innodb_max_dirty_pages_pct 是 MySQL InnoDB 存储引擎非常重要的一个参数,用来控制buffer pool中脏页的百分比,当脏页数量占比超过这个参数设置的值时,In ...

  8. Mysql优化系列(1)--Innodb重要参数优化

    1.简单介绍 InnoDB给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎.InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读.这些特 ...

  9. Mysql优化系列(1)--Innodb重要参数优化(转)

    原创作者:https://www.cnblogs.com/kevingrace/p/6133818.html 1.简单介绍 InnoDB给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全(ACI ...

最新文章

  1. php判断手机浏览器,PHP环境下判断客户端是否为手机浏览器
  2. java-JSON: Expected value at 1:0 错误
  3. Kali Linux Web 渗透测试秘籍 第六章 利用 -- 低悬的果实
  4. [BZOJ2761/Luogu4305][JLOI2011]不重复数字 题解
  5. SQL语句 分页实现
  6. ASPNET2.0 发布问题
  7. matlab匹配滤波器的仿真
  8. 如何修改云服务器连接密码错误,如何修改云服务器连接密码
  9. 攒机笔记十六:制作pe盘
  10. Office 2010安装过程中修复“错误2203。发生内部错误”
  11. 路由器与交换机的区别?
  12. vue引入svg图片
  13. 大学英语综合教程二 Unit 5 课文内容英译中 中英翻译
  14. Unity发布WebGL运行Js代码报错:‘Pointer_stringify‘ is obsoleted and will be removed in a future Unity version.
  15. catchlog是什么软件_如何处理异常? catch Exception OR catch Throwable
  16. spring cloudAlibaba gateway网关报错,显示无法找到注册中心注册自己。
  17. linux和windows内存管理知乎,windows server 哪个版本好 知乎
  18. CST—电磁及EMC仿真工具
  19. c语言 图形界面 入门,C语言是怎么实现图形界面的?
  20. 开源游戏掌机几乎能运行所有经典平台游戏

热门文章

  1. 错误make: nvcc: Command not found 解决方案
  2. MySQL绿色版5.7以上安装教程
  3. Kotlin 4 构造,对象,修饰符,关键字,委托
  4. RocketMQ专栏
  5. Python 中使用 for、while 循环打印杨辉三角练习(列表索引练习)。
  6. 英国电价与光伏容量占比关系分析
  7. 《单页Web应用:JavaScript从前端到后端》——1.4 小结
  8. smem – Linux 内存监视软件
  9. Ibatis的类型处理器TypeHandler解析
  10. IIS_FastCGI+php5.3+wincache+memcached+ZendLoader