【问题标题】:Mysql O_DSYNC confusionMysql O_DSYNC 混乱
【发布时间】:2015-01-23 14:37:05
【问题描述】:

根据关于 O_DSYNC (http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html#sysvar_innodb_flush_method) 的 mysql 文档:

“O_DSYNC:InnoDB 使用 O_SYNC 打开和刷新日志文件,使用 fsync() 刷新数据文件。InnoDB 不直接使用 O_DSYNC,因为它在多种 Unix 上都存在问题。”

但是调用 fsync() 会强制文件进入同步 I/O 文件完整性完成状态(数据和元数据),而 fdatasync() 仅强制文件进入同步 I/O 数据完整性完成状态。 (无元数据)

所以根据这个mysql应该使用fdatasync()而不是fsync()来模拟O_DSYNC(这会导致写入按照fdatasync()等同步I/O数据完整性完成的要求执行)。旗帜。我在这里缺少什么?

【问题讨论】:

    标签: mysql linux filesystems posix


    【解决方案1】:

    我认为您在这里没有遗漏任何东西。

    InnoDB 开发人员很保守。我希望他们在各种 Unix 平台上测试了fdatasync,并发现这有时会导致某些系统损坏。与他们在 O_DSYNC 中发现的类似。

    权衡数据损坏与性能,InnoDB 开发人员通过使用经过测试的内容在他们测试的平台上“工作”来确保安全。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-16
      • 1970-01-01
      • 2012-02-06
      相关资源
      最近更新 更多