这是一个坏主意吗? 我知道旧版本的MySQL在NFS上performance不佳。 我想象的问题在于使用fsnc()和/或O_DIRECT。 如果这些问题大部分已经解决了,那么是否存在常见的陷阱/疑难杂症,特别是在一个很大的(有数千万条logging的多个表)InnoDB数据库中,可能会达到20-50次读取/秒
对你来说,第一件好消息是,在一年之前,你在这个问题上的信息比在一年前提出的问题要多。 我从痛苦的经历中知道这一点。
Netapp的官方命令是在所有三种协议中支持MySQL。
ONTAP MySQL Enterprise NFS iSCSI FCP 7G 5.X Supported Supported Supported 7G 4.X Supported Supported Supported MySQL Enterprise versions 4.X and 5.X are supported on all NetApp fabric attached storage models running any release of Data ONTAP 7G for any server platform supported by MySQL that is listed in the NetApp host compatibility matrix for each protocol.
好消息的第二件事就是你没有说MyISAM。 否则,这将是一个非常不同的和更加阴暗的故事,由糟糕的表演和没有支持的信息组成。 没有多lessselect,只能使用基于块的iSCSI或FCP。 不是说那些工作不太好 ,但是他们是一个稍微不同的水壶,以文件为基础。
相反,Netapp已经在所有三种存储协议中发布了MySQL 5.0的一些OLTP基准testing 。 结果表明,InnoDB引擎performance良好,符合Oracle的协议差异。 FCP在吞吐量方面排在前面。 虽然iSCSI是FCP的9%,NFS是16%。 这不像我们预料的那么大。
更有帮助的是,同一份文件详细介绍了NFS和InnoDB为达到这一基准数据所采取的具体步骤。 这些包括在源卷上修改innodb_buffer_pool_size , innodb_flush_method ,NFS的属性caching超时, no_atime_update和(如Richard所述),指定日志的不同挂载点。
我个人不build议将日志存储在不同的存储上,如本地磁盘。 日志与任何已经下载到磁盘的数据密切相关。 如果你把他们完全分开,那么你可以设置自己的秋天。 更有甚者,如果你想执行快照,改变运行MySQL的机器或者你的本地磁盘比文件pipe理器更可靠。
说了这么多,你可以做的下一个最好的事情就是吮吸它。 根据文档中的最佳实践设置环境,并使用自己的数据执行一些基准testing。 与当地的磁盘进行比较,评估它的performance。
–
注意:第一个链接现在受到限制。 你不说你是否已经是Netapp的客户。 无论如何,你应该可以查看第二个链接。
如果你可以使用它,NFS4将是最好的。 我至less会在noatime进行登陆。 您还应该考虑在本地磁盘上指定日志文件位置。 如果您没有本地存储(如VM常见),则可以尝试将日志存储在通过与主存储不同的networking接口进行路由的挂载点上。
就个人而言,当从NetApp for MySQL装载磁盘时,我会使用iSCSI而不是NFS。 效率非常高,您可以直接访问LUN。
MySQL InnoDB的提交性能很大程度上取决于底层IO能够将数据同步到磁盘的速度。 这受到networking延迟的巨大影响,所以无论服务器是什么,通过NFS运行MySQL都会有很大的打击。 即使你的networking尽可能快,它仍然可能比本地磁盘慢很多(我假设你的本地光盘是一个电池供电的RAID控制器)。
另一方面,读取性能主要取决于有多less数据库适合内存。 如果你可以将整个数据库放在RAM中(或者大部分,取决于使用模式),那么性能将会非常好,因为你将innodb_buffer_pool设置为大于数据,理论上没有读取永远需要在NFS上完成。
只要你不使用berkleydb,MySQL / InnoDB就可以正常工作到NFS。 我不确定Netapp NFS文档中的内容,但是如果使用“asynchronous”选项安装NFS卷,那么应用程序不会被阻塞,等待写入命中磁盘。