首先让我承认我对硬盘的内部工作原理非常无知。因此,当我阅读变量innodb_flush_method的手册时,它让我感到困惑。我可以用外行的术语解释 O_DSYNC 和 O_DIRECT 的区别,以及如何知道这是否是数据库服务器上的性能问题。
我的设置的一些统计信息:运行 MySQL 5.1.49-64 位的 Mac OSX 10.6(32 位内核,因为架构已过时)(希望它能让我使用内存)。8GB RAM,~6GB innodb 数据/索引。
Rol*_*DBA 18
这是关于fdatasync()
工作原理与fsync()
工作原理的解释
fdatasync()
将文件的所有数据缓冲区刷新到磁盘(在系统调用返回之前)。它类似于fsync()
但不需要更新元数据,例如访问时间。访问数据库或日志文件的应用程序通常会写入一个很小的数据片段(例如,日志文件中的一行)然后fsync()
立即调用,以确保写入的数据物理存储在硬盘上。不幸的是,fsync()
总是会发起两次写操作
如果修改时间不是事务概念的一部分,那么fdatasync()
可以用来避免不必要的inode磁盘写操作。
在英语中,O_DSYNC
是不是更快O_DIRECT
,因为O_DIRECT
电话fsync()
的两倍(一个用于日志,一个用于数据),并fsync()
通过两次写操作验证数据写入。使用O_DSYNC
调用fdatasync()
和fsync()
. 您可以将其fdatasync()
视为异步fsync()
(不验证数据)。
从数字O_DSYNC
上看,有四个写操作,其中两个被验证,而fsync()
四个写操作,都在之后被验证。
O_DSYNC
O_DIRECT
O_DIRECT
我希望这个答案有帮助,我希望我没有让你的事情变得更糟。
归档时间: |
|
查看次数: |
13567 次 |
最近记录: |