MySQL InnoDB:innodb_flush_method

8

手册页面最近已更新。现在更加清晰了一些。 - Morgan Tocker
2个回答

8

O_DIRECT绕过了操作系统的缓存系统。SAN可能是一个非常快的存储系统,但通常它会在网络链接的某个地方,并且被代理/隐藏在各种其他层后面。通过使用消除本地缓存的O_DIRECT,您强制InnoDB每次直接访问存储系统。


2
当我们使用o_direct时,我们将使用几乎所有物理内存来缓存mysql的数据。因此,看起来mysql文档假定我们浪费了一些空闲内存而没有分配给mysql。如果我们不保留空闲物理内存,那么我认为o_direct对于select操作不会变慢。如果块可以被缓存在文件系统中,那么如果我们让mysql使用所有的空闲内存,它很可能也可以被缓存在mysql缓冲区中。 - Daniel
1
MySQL可以并且会缓存查询结果,但如果任何一个查询仍然需要进行表扫描,那么你就要去访问磁盘了。使用O_DIRECT时,内存中没有磁盘缓存可用,所以你直接访问存储介质。 - Marc B
值得点踩:在较新的InnoDB版本中,您希望尽可能多地分配RAM用于缓冲池,这显然不留任何机会让操作系统缓存为InnoDB提供任何好处。 - noonex

3

你真的需要在硬件上尝试flush方法,以找到最适合你的方法。设置:

innodb_flush_method = O_DIRECT

在Dell 2950服务器上使用15K RPM SAS驱动器配置RAID 1配置和Dell的PERC缓存控制器,我们的性能提高了15%。我们正在运行Ubuntu 9.04股票内核,大部分工作是使用innodb的mysql。您的结果可能会有所不同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接