mysql innodb flush_MySQL Config--参数innodb_flush_method

2023-10-27

延迟写

传统的UNIX实现在内核中设有缓冲区高速缓存或页面高速缓存,大多数磁盘I/O都通过缓冲进行。当将数据写入文件时,内核通常先将该数据复制到其中一个缓冲区中,如果该缓冲区尚未写满,则并不将其排入输出队列,而是等待其写满或者当内核需要重用该缓冲区以便存放其他磁盘块数据时,再将该缓冲排入输出队列,然后待其到达队首时,才进行实际的I/O操作。这种输出方式被称为延迟写(delayed write)(Bach [1986]第3章详细讨论了缓冲区高速缓存)。

"延迟写"减少了磁盘读写次数,但是却降低了文件内容的更新速度,使得欲写到文件中的数据在一段时间内并没有写到磁盘上。当系统发生故障时,这种延迟可能造成文件更新内容的丢失。为了保证磁盘上实际文件系统与缓冲区高速缓存中内容的一致性,UNIX系统提供了sync、fsync和fdatasync三个函数。

sync函数只是将所有修改过的块缓冲区排入写队列,无需等待写磁盘操作便返回。系统守护进程(update)会周期性(30秒)调用sync函数来刷新内存缓冲区。

fsync函数只对由文件描述符filedes指定的单一文件起作用,需要等待写磁盘操作结束后才返回,确保修改过的数据被写入到磁盘。fsync不但更新数据,还更新指定文件元数据(如修改时间和访问时间)。

fdatasync函数与fsync函数类似,但fdatasync函数只更新数据,而不更新指定文件的属性。

由于fsync函数除需要更新数据外,还需要更新文件元数据(metadata,包括文件大小/访问时间/修改时间等),因此fsync函数需要两次写,而fdatasync函数值需要一次写。

Unfortunately fsync() will alwaysalways initialize two write operations: one for the newly written data and another one in order to update the modification time stored in the inode.

If the modification time is not a part of the transaction concept fdatasync() can be used to avoid unnecessary inode disk write operations.

参数innodb_flush_method

参数innodb_flush_method有在Unix上有6个可选值:fsync/O_DSYNC/littlesync/nosync/O_DIRECT/O_DIRECT_NO_FSYNC,由于littlesync/nosync风险较高,常用的下面4种:

fsync:默认值,使用fsync()系统调用来刷新数据文件和日志文件

O_DSYNC:使用O_SYNC打开和刷新日志文件,使用fsync()刷新数据文件。(在很多UNIX版本上直接使用O_DSYNC会存在问题)

O_DIRECT:使用O_DIRECT打开数据文件,使用fsync()来刷新数据文件和日志文件。(O_DIRECT在大部分UNIX系统上可用)

O_DIRECT_NO_FSYNC:在Flush IO操作时使用O_DIRECT,但在每次write操作时跳过fsync()系统调用。(O_DIRECT_NO_FSYNC在MySQL 5.6.6版本引入,但不适合XFS和EXT4文件系统)

生产环境中使用innodb_flush_method=O_DIRECT

The innodb_flush_method options for Unix-like systems include:

fsync: InnoDB uses the fsync() system call to flush both the data and log files. fsync is the default setting.

O_DSYNC: InnoDB uses O_SYNC to open and flush the log files, and fsync() to flush the data files. InnoDB does not use O_DSYNC directly because there have been problems with it on many varieties of Unix.

littlesync: This option is used for internal performance testing and is currently unsupported. Use at your own risk.

nosync: This option is used for internal performance testing and is currently unsupported. Use at your own risk.

O_DIRECT: InnoDB uses O_DIRECT (or directio() on Solaris) to open the data files, and uses fsync() to flush both the data and log files. This option is available on some GNU/Linux versions, FreeBSD, and Solaris.

O_DIRECT_NO_FSYNC: InnoDB uses O_DIRECT during flushing I/O, but skips the fsync() system call after each write operation.

This setting is not suitable for file systems such as XFS and EXT4, which require an fsync() system call to synchronize file system metadata changes. If you are not sure whether your file system requires an fsync() system call to synchronize file system metadata changes, use O_DIRECT instead.

On storage devices with cache, data loss is possible if data files and redo log files reside on different storage devices, and a crash occurs before data file writes are flushed from the device cache. If you use or intend to use different storage devices for redo logs and data files, use O_DIRECT instead.

如果使用带缓存的RAID控制器,推荐使用O_DIRECT来避免操作系统和存储系统两次缓存。

如果使用SAN存储来存放数据文件和日志文件,对于读负载较高的存储系统,使用fsync()或O_DSYNC可能更快。

755447136a910c67ed06793edc55ecc3.png

摘抄连接:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql innodb flush_MySQL Config--参数innodb_flush_method 的相关文章

  • 【面试】面试官:src和href的区别

    1 请求资源类型不同 1 href是Hypertext Reference的缩写 表示超文本引用 用来建立当前元素和文档之问的链接 常用的有 link a 2 在请求 src 资源时会将其指向的资源下载并应用到文档中 常用的有script
  • C++STL容器(上)string/vector/deque/stack/queue/list

    数据结构 研究节点和节点之间的关系 STL 算法 容器 迭代器 实现了数据结构和算法的有效分离 用来管理元素 算法和迭代器可以进行无缝连接 count v begin v end 3 统计元素3的个数 容器除了可以放基础数据类型 也可以放元
  • 字符数组、字符串数组转换成字符串【JAVA基础】

    一 字符数组to字符串 直接声明 char c a b c String s new String c 二 字符串数组to字符串 string是不可变类 利用StringBuffer String str abc dfe hij Strin
  • l130 华大低功耗mcu_HC32L110C6PA HC32L110C6UA 华大超低功耗 Cortex-M0+ 32位MCU

    HC32L110C6PA HC32L110C4UAHC32L110C6UA 华大超低功耗 Cortex M0 32位MCU HC32L110C6PA HC32L110C4UA 华大超低功耗 Cortex M0 32位MCU 超低功耗 MCU
  • BLE基础理论/Android BLE开发示例/蓝牙扫描列表数量扫描包/扫描响应包设置等

    参考 https blog csdn net qq 36075612 article details 127739150 spm 1001 2014 3001 5502 参考 https blog csdn net qq 36075612
  • 蓝桥杯:李白打酒加强版

    话说大诗人李白 一生好饮 幸好他从不开车 一天 他提着酒壶 从家里出来 酒壶中有酒 22 斗 他边走边唱 无事街上走 提壶去打酒 逢店加一倍 遇花喝一斗 这一路上 他一共遇到店 NN 次 遇到花 MM 次 已知最后一次遇到的是花 他正好把酒
  • Java变量的分类(根据作用域)

    按照作用域的不同 变量可分为 成员变量和局部变量 成员变量有两种 静态变量和实例变量 成员变量 在类中声明 作用域是整个类 局部变量 在一个方法的内部声明 作用域是整个方法 静态变量 被static关键字修饰 在内存中只有一个 被类的所有实
  • Jenkins配置定时任务

    1 点击任务后 点击配置 2 选择 构建触发器 下面的 定时构建 并设定定时规则 设置完成后 构建任务就会按照我们设置的时间定时执行了 3 设定规则 此处定时任务的格式遵循 cron 的语法 可以与 cron 的语法有轻微的差异 具体格式
  • App版本更新接口的设计

    工作这几年碰到的版本检测升级的接口也算是五花八门 啥样的都有 但肯定有的功能是有个apk的下载链接 能间接或直接提示你是强制还是非强制更新 间接是指提供你后台最新版本号 让你自己与本地版本号通过比较得出是否升级 直接就是后台接口直接返回个B
  • redhat6.9安装docker

    1 离线安装说明 内网环境需要在redhat6 9上安装docker以及docker compose 内网不能连接互联网 所以只能采用手工下载离线安装包的方式做 2 需要操作系统版本 docker支持的版本有 redhat7 redhat6
  • java类的加载顺序

    一 程序 package yy class Parent static int a 4 static System out println Parent class Chlid extends Parent static int a 5 s
  • tensorflow笔记(二十七)——重要tensor操作函数

    1 合并 多个tensor的合并主要包括2个函数 tf concat和tf stack 他们的输出参数都是list of tensor 区别是 tf concat是沿某一维度拼接shape相同的张量 拼接生成的新张量维度不会增加 tf st
  • OpenCV将多幅BMP压缩成AVI文件

    最近需要同时采集多个摄像头的视频 一般的屏幕录制软件使用不了 只能自己把一幅幅图片保存下来 再转成AVI视频 OpenCV正好提供了这类函数 所以自己做了一个简单的转换工具 主要利用的函数 CvVideoWriter cvCreateVid
  • python 笔记16--Flask-BasicAuth 使用与重构

    python 笔记16 Flask BasicAuth 使用与重构 1 介绍 2 方案 2 1 BasicAuth 使用与原理 2 2 BasicAuth 优化重构 3 注意事项 4 说明 1 介绍 Flask BasicAuth 是一种F
  • 【C/C++面试必备】面向对象与面向过程的区别

    这篇文章来说下面向对象编程 那什么是面向对象编程呢 介绍面向对象之前 那必须先说一下面向过程 什么是面向过程呢 面向过程 Procedure Oriented Programming 简称POP 是一种编程模型 由一系列要执行的计算步骤组成
  • https网络编程——openssl中后缀名文件说明以及常用的证书协议

    参考 openssl中后缀名文件说明 地址 https qingmu blog csdn net article details 108215177 spm 1001 2014 3001 5502 参考 Openssl常用的证书协议有哪些
  • 源码编译安装Nginx并设置开机自启动

    切换目录 cd usr local src 下载Nginx wget http nginx org download nginx 1 16 0 tar gz 解压源码 tar zxvf nginx 1 16 0 tar gz 配置源码 cd
  • Feign get请求通过对象传递url参数,且支持对象中的属性排序

    1 get请求参数比较多时候写param是很累的一种方式 GetMapping value fapi v1 positionSide dual PositionSideResponse getPositionSide RequestHead
  • 图像处理中的线性和非线性滤波器(上)

    滤波器可以说是信号处理中最重要的研究对象 滤波器可以将原始信号的有用信息通过各种组合来凸显出来 因此很多时候也将它们称为Neighborhood operators 基本上所有涉及到特征的应用场合都要考虑滤波器 即使是发展到看起来很高大上的

随机推荐

  • 几何画板画椭圆_“几何画板”教物理系列1——凸透镜成像光路图

    点上方蓝字 物理王大师 快速关注 对于很多经历过初中物理的人来说 提到 凸透镜成像 可能就会激起很多痛苦的回忆 不懂原理 只懂死记硬背的 会对这个 表格 深恶痛绝 光学成像 问题 不是死的 而是活的 这种披着物理外皮的几何题 最喜欢考察 动
  • zTree自定义样式图标---纯CSS样式实现

    纯CSS样式覆盖 实现zTree自定义样式图标 1 效果样式 如下 2 修改设置 隐藏默认图标 var setting view showTitle false showLine false showIcon false 不展示图标 sel
  • VS2010 C++单元测试之gtest与OpenCppCoverage实践

    1 前言 想减少开发过程中产生Bug 尤其是迭代开发过程中新引入的Bug 进行单元测试是一个非常的方法 可以用来减少开发过程的Bug 尤其是通过CI自动化 每次有新的修改 都进行回归测试 可以大大增强代码的鲁棒性 1 1 单元测试 单元测试
  • c++11实现线程池

    c 11实现的线程池 采用的是函数式编程接口的方式来处理各个任务 比传统的通过实现 Runnable接口的方式更加简洁方便 添加头文件 include
  • spark-sql运行脚本报错 tasks bigger than bigger than spark.driver.maxResult

    spark sql执行脚本 导出数据的脚本爆出如下异常 Caused by org apache spark SparkException Job aborted due to stage failure Total size of ser
  • element 跨页多选row-key

    element 跨页多选 核心 vue
  • spring中过滤器(filter)、拦截器(interceptor)和切面(aop)的执行顺序

    1 程序执行的顺序是先进过滤器 再进拦截器 最后进切面 注意 如果拦截器中preHandle方法返回的为false时 则无法进入切面 例子如下 RestController RequestMapping user public class
  • -XX:+UseCGroupMemoryLimitForHeap 无法创建虚拟机问题

    XX UseCGroupMemoryLimitForHeap 启动参数 无法创建虚拟机问题 记录一个问题 因jdk11版本稳定 为了优化jvm内存和gc 公司决定将jdk8升级到11 因运行环境是k8s 为了使jvm保留根据容器规范的内存
  • Android SurfaceFlinger分析

    SufaceFlinger的构成并不是太复杂 复杂的是他的客户端建构 SufaceFlinger主要功能是 1 将Layers Surfaces 内容的刷新到屏幕上 2 维持Layer的Zorder序列 并对Layer 最终输出做出裁剪计算
  • json中json.loads()与json.dumps()的区别

    最近对于json中loads与dumps总是搞不清 查了资料才总算搞明白了 1 json dumps 和json loads 是json格式处理函数 2 json dumps 函数是将一个Python数据类型列表进行json格式的编码解析
  • 超详细Git 安装教程(Windows)

    Git 安装教程 windows 给新电脑安装下git 顺便记下笔记 安装版本为2 30 2 git下载地址 https git scm com download win 下载后点击即可进行安装 下面是具体安装步骤 1 许可申明 点击 Ne
  • element-ui table 对数据进行处理后渲染

    html 在需要处理的列上加formatter自定义函数 如下 对票号进行后8位截取
  • 在GitHub上搭建Hexo个人博客

    文章目录 概述 准备工作 安装Git 安装Node js 安装Hexo 执行安装命令 初始化网站 生成默认网页 启动本地预览服务 修改主题 部署到GitHub 配置免密SSH登陆 创建个人主页仓库 绑定个人域名 可选 上传Hexo生成的博客
  • 一个超简单的反编译任务(IDAPro、X32dbg)

    一个超简单的反汇编任务 所需工具 IDAPro X32dbg Visual C 6 0 实验步骤 首先 我们新建一个简单的程序并编译运行 这里笔者建立了一个弹窗程序 运行结果如下 进行IDA逆向分析 我们可以通过空格键来切换视图 这时可以看
  • 微信小程序中使用计算属性

    微信小程序中使用计算属性 在小程序开发中 它的基本原理和vue是大同小异 但是有的时候就是因为这小异造成很多不必要的麻烦 在小程序开发中 改变数据更新视图用的是Page prototype setData方法 遇到一些复杂数据逻辑判断时 代
  • STM32_中断系统_概述

    1 中断的基本概念 2 NVIC 嵌套向量控制器 中断及异常向量表 3 中断优先级 1 中断的基本概念 1 1处理器中的中断 在处理器中 CPU正在执行某一段代码时遇到内部或者外部的紧急事件需要处理 暂停当前执行的代码 转而去处理紧急事件
  • React中jsx或tsx的switch语句使用

    React中jsx或tsx的switch语句使用 gt switch case case 1 return break case 2 return break
  • SRM系统选择哪种部署方式?

    传统线下采购模式存在过程不透明 合规性差 沟通效率低且采购成本高等痛点 随着互联网技术不断发展 国内以阿里云 腾讯云 华为云为代表的丛多互联网企业都提供了上云基础服务 IAAS 各种SaaS管理软件也逐渐被中国企业接受 在此背景下 近几年不
  • Qt自定义控件的使用教程

    自定义的控件无非是继承自Qt的某个类自定义的一个类 常用的是继承自QWidget类 在Qt可视化编程中 可视化编程有两种方式 第一种 使用常规的方法 创建一个该类的对象 然后加入到布局管理器中 show一下就可以看到效果了 第二种 Qt D
  • mysql innodb flush_MySQL Config--参数innodb_flush_method

    延迟写 传统的UNIX实现在内核中设有缓冲区高速缓存或页面高速缓存 大多数磁盘I O都通过缓冲进行 当将数据写入文件时 内核通常先将该数据复制到其中一个缓冲区中 如果该缓冲区尚未写满 则并不将其排入输出队列 而是等待其写满或者当内核需要重用