Mysql O_DSYNC混乱

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

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

但是调用fsync()强制文件处于同步I / O文件完整性完成状态(数据和元数据),而fdatasync()仅强制文件处于同步I / O数据完整性完成状态。 (没有元数据)

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

我不认为你在这里错过了什么。

InnoDB开发者正在保守。 我期望他们在各种Unix平台上测试fdatasync ,并发现这有时会在一些系统上造成损坏。 类似于他们在O_DSYNC中找到的内容。

衡量数据对性能的破坏,InnoDB开发人员正在使用经过测试的“在他们所测试的平台上”工作的“安全”。