首先让我承认我对硬盘的内部工作原理非常无知。因此,当我阅读变量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_DSYNCO_DIRECTO_DIRECT我希望这个答案有帮助,我希望我没有让你的事情变得更糟。
| 归档时间: |
|
| 查看次数: |
13567 次 |
| 最近记录: |