100%SELECT工作负载的Linux文件系统build议

我有一个MySQL数据库,每个表包含数百万行,共有9个表。 数据库完全填充,我所做的只是读取,即没有插入或更新。 数据存储在MyISAM表中。

鉴于这种情况下,哪个Linux文件系统最好? 目前,我有xfs。 但是,我从某个地方看到xfs的阅读performance糟糕。 真的吗? 我应该将数据库转移到ext3文件系统吗?

谢谢

总的来说,最近两个体面的Linux FS都是XFS和EXT4,都是基于扩展的文件系统。

我没有看到两者之间有什么严重的区别,但是两者都比EXT3好得多。

可以做的最好的事情是:

  • 禁用atime( notatime挂载选项)
  • 将MySQL缓冲区设置为物理RAM的2/3(剩下的用于磁盘caching)
  • 使用EXPLAIN SELECT ...validation您的索引
  • 转储FS并完全恢复文件,这会稍微减less碎片

如果您对MySQL数据库的性能非常认真,我强烈build议在testing环境中自己做基准testing。 从一个内核版本到另一个内核版本,文件系统的性能可能会有很大的不同,而且select可能很大程度上取决于您的确切工作量

作为一个简单的比较,只需要build立一个与生产系统相同的内核版本的testing服务器,并使用sysbench来对xfs,ext3和ext4进行基准testing。

为了更好地查看,您可以在testing服务器上恢复最近的数据库备份,并创build一些脚本来生成类似于您的工作负载的负载。

而且,每当计划升级生产计算机上的内核时,都应该重新运行基准testing,以确定是否存在回归。 由于在这一点上不能轻松切换文件系统(当然,这取决于您的设置),您至less应确保在升级后性能不会降低。

编辑:

顺便说一下,你可以在MySQL性能博客上find很多很好的build议。

试试MySQLTuner只是想知道你的问题在哪里。 我会想象这是糟糕的索引性能或真正糟糕的caching命中率。 不知道更多信息,可能对于您的数据集太小。

wget mysqltuner.pl (redirect到实际脚本的波兰域名。)

和其他海报一样,我非常怀疑你的磁盘性能或文件系统的select是瓶颈。

实际的数据库有多大? 你提到了数百万行,但是并不是说每行有多大。 如果你不做任何更新,而且这只是一个只读数据库,那么考虑将它加载到内存中(假设它适合并假设你有足够的内存)。