返回顶部
首页 > 资讯 > 数据库 >怎么理解MySQL的innodb_flush_method
  • 414
分享到

怎么理解MySQL的innodb_flush_method

2024-04-02 19:04:59 414人浏览 八月长安
摘要

这篇文章主要讲解了“怎么理解Mysql的innodb_flush_method”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解mysql的innodb

这篇文章主要讲解了“怎么理解Mysql的innodb_flush_method”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解mysql的innodb_flush_method”吧!

官方文档描述如下:

By default, InnoDB uses the fsync()system call to flush both the data and log files. If
innodb_flush_method option is set to O_DSYNC, InnoDB uses O_SYNC to open and flush the
log files, and fsync()to flush the data files. If O_DIRECT is specified (available on some GNU/
linux versions, FreeBSD, and Solaris), InnoDBuses O_DIRECT(or directio()on Solaris) to
open the data files, and uses fsync()to flush both the data and log files. Note that InnoDB uses
fsync() instead of fdatasync(), and it does not use O_DSYNC by default because there have
been problems with it on many varieties of Unix.

innodb_flush_method
常规3个值
1、fdatasync
2、O_DSYNC
3、O_DIRECT

正常的访问方式 
用户态缓存---》内核态缓存---》磁盘

按照MYsql的描述
1、fdatasync
InnoDB uses the fsync() system call to flush both the data and log files.
Note that InnoDB uses fsync() instead of fdatasync()
虽然MYSQL可以使用fdatasync为参数但是实际上是调用的系统的 fsync()函数,
我们可以看看LINUX下FSYNC()函数的描述
fsync()  transfers  ("flushes") all modified in-core data of (i.e., modified buffer cache pages for) the file referred to by the
       file descriptor fd to the disk device (or other permanent storage device) so that all changed infORMation can be retrieved  even
       after  the  system crashed or was rebooted.  This includes writing through or flushing a disk cache if present.  The call blocks
       until the device reports that the transfer has completed.  It also flushes metadata information associated with  the  file  (see
       stat(2)).
       简单的说这个参数用于同步所有线程修改过的文件,而进程中的PCB中记录了打开文件,他是通过文件描述符进行匹配的
       在LINUX内核中/usr/src/linux-headers-3.19.0-25-generic/include/linux/sched.h
       有如下的PCB结构体
       struct task_struct { }
       其中有一个files_struct的结构体,而文件描述符就是这样一个结构体的指针
       那么只要MYSQL线程进行了刷新动作,那么他的这些文件的数据一定会同步到磁盘
2、O_DSYNC
InnoDB uses O_SYNC to open and flush the log files, and fsync()to flush the data files
当设置为这个选项的时候,当MYSQL线程打开LOGFILE的时候使用的O_SYNC的方式,而对数据文件还是使用的fsync()
我们知道对一个文件进行读,打开是使用LINUX的
open()函数,而其中也就有这样一个选项
O_SYNC The  file  is  opened for synchronous I/O.  Any write(2)s on the resulting file descriptor will block the calling process
       until the data has been physically written to the underlying hardware.
       他描述的是如果这样打开一个文件那么在数据从内核态缓存写到了物理磁盘前,任何试图修改文件描述符的进程都会被堵塞。如此保证了日志文件
       最大的安全
3、O_DIRECT
If O_DIRECT is specified (available on some GNU/Linux versions, FreeBSD, and Solaris), InnoDB 
uses O_DIRECT(or directio()on Solaris) to open the data files, and uses 
fsync()to flush both the data and log files.
使用这个选项MYSQL使用O_DIRECT方式打开数据文件,而fsync()会最终同步所有的数据和日志文件。
我们同样看看open()函数中关于O_DIRECT描述
O_DIRECT (Since Linux 2.4.10)
         Try to minimize cache effects of the I/O to and from this file.  In general this will degrade performance, but it is use‐
         ful  in special situations, such as when applications do their own caching.  File I/O is done directly to/from user-space
         buffers.  The O_DIRECT flag on its own makes an effort to transfer data synchronously, but does not give  the  guarantees
         of  the  O_SYNC flag that data and necessary metadata are transferred.  To guarantee synchronous I/O, O_SYNC must be used
         in addition to O_DIRECT.  
         使用这个选项一般来说会降低性能,但是在特定的情况下比如应用程序有自己的缓存机制。I/O直接来自用户态的缓存,O_DIRECT标识对大量的
         数据写有利,因为他绕开了内核态缓存,但是他并同步METADATA(这里占时理解为Inode缓存,也就是文件的基本信息比如打开时间修改时间等)
         所以要完成同步必须同时调用O_SYNC。
         如此我们也了解为什么为什么使用O_DIRECT还会调用FSYNC()我们知道FSYNC()是全同步的,LINUX上的传统的FDATASYNC()是不同步METADATA的
         如INODE缓存,进程描述缓存。但是他能够对大量的数据绕开缓存,提高性能,需要最后同步的只是DATAFILE的METADAT。

        MYSQL有自己的缓冲,这种可以使用O_DIRECT比较好

感谢各位的阅读,以上就是“怎么理解MySQL的innodb_flush_method”的内容了,经过本文的学习后,相信大家对怎么理解MySQL的innodb_flush_method这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

您可能感兴趣的文档:

--结束END--

本文标题: 怎么理解MySQL的innodb_flush_method

本文链接: https://lsjlt.com/news/66950.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么理解MySQL的innodb_flush_method
    这篇文章主要讲解了“怎么理解MySQL的innodb_flush_method”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解MySQL的innodb...
    99+
    2024-04-02
  • mysql参数innodb_flush_method解析
    innodb_flush_method几个选项的解析 首先让我们忘记mysql,先来看下linux os提供的文件操作方式 open文件的三种模式 O_DIRECT,O_SYNC,O_DSYNC以及default模式(当然可选的远不止这四个...
    99+
    2015-02-22
    mysql参数innodb_flush_method解析
  • MySQL中innodb_flush_method函数有什么作用
    本篇内容介绍了“MySQL中innodb_flush_method函数有什么作用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细...
    99+
    2024-04-02
  • 怎么理解MySQL中的MVCC
    这篇文章将为大家详细讲解有关怎么理解MySQL中的MVCC,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。关系数据库管理系统使用MVCC(Multiversi...
    99+
    2024-04-02
  • 怎么理解MySQL中的table_id
    本篇内容介绍了“怎么理解MySQL中的table_id”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一 t...
    99+
    2024-04-02
  • 怎么理解MySQL的Insert buffer
    本篇内容介绍了“怎么理解MySQL的Insert buffer”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成...
    99+
    2024-04-02
  • MySQL中的锁怎么理解
    本篇内容主要讲解“MySQL中的锁怎么理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL中的锁怎么理解”吧!01. 怎么认识"锁"...
    99+
    2024-04-02
  • 怎么理解MySQL的EVENT事件
    这篇文章主要介绍“怎么理解MySQL的EVENT事件”,在日常操作中,相信很多人在怎么理解MySQL的EVENT事件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么理解My...
    99+
    2024-04-02
  • 怎么理解MySQL的2PC和3PC
    这篇文章主要介绍“怎么理解MySQL的2PC和3PC”,在日常操作中,相信很多人在怎么理解MySQL的2PC和3PC问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么理解My...
    99+
    2024-04-02
  • 怎么理解MySQL的GTID复制
    这篇文章主要介绍“怎么理解MySQL的GTID复制”,在日常操作中,相信很多人在怎么理解MySQL的GTID复制问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么理解MySQ...
    99+
    2024-04-02
  • 怎么理解MySQL的API接口
    这篇文章给大家介绍怎么理解MySQL的API接口,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 MySQL 的 API 接口为了方便应用程序的开发,MyS...
    99+
    2024-04-02
  • 怎么理解mysql innodb的行锁
    这篇文章主要讲解了“怎么理解mysql innodb的行锁”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解mysql innodb的行锁”吧! ...
    99+
    2024-04-02
  • 怎么理解mysql中的redo log
    今天就跟大家聊聊有关怎么理解mysql中的redo log,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。重做日志(redo log)前言:之前一直弄不清楚 mysql 里面 bin ...
    99+
    2023-06-06
  • 怎么理解MySQL安全
    本篇内容介绍了“怎么理解MySQL安全”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!MySQL安全当多个用...
    99+
    2024-04-02
  • 怎么理解MySQL change buffer
    本篇内容介绍了“怎么理解MySQL change buffer”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成...
    99+
    2024-04-02
  • 怎么理解MySQL事务
    这篇“怎么理解MySQL事务”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么理解MySQL事务”文章吧。事务指逻辑上的一组...
    99+
    2023-06-26
  • MySQL架构怎么理解
    本篇内容主要讲解“MySQL架构怎么理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL架构怎么理解”吧!MySQL物理架构配置文件auto.cnf&n...
    99+
    2023-03-14
    mysql
  • MySQL索引的底层原理怎么理解
    这篇文章主要介绍了MySQL索引的底层原理怎么理解的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MySQL索引的底层原理怎么理解文章都会有所收获,下面我们一起来看看吧。Mysql 作为互联网中非常热门的数据库,...
    99+
    2023-07-04
  • 怎么理解MySQL 5.7中的Generated Column
    这期内容当中小编将会给大家带来有关怎么理解MySQL 5.7中的Generated Column,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。  正文&n...
    99+
    2024-04-02
  • 怎么理解MYSQL的auto_increment_offset和auto_increment_increment值
    本篇内容主要讲解“怎么理解MYSQL的auto_increment_offset和auto_increment_increment值”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作