针对 MySQL 100% SELECT 工作负载的 Linux 文件系统建议

针对 MySQL 100% SELECT 工作负载的 Linux 文件系统建议

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

在这种情况下,哪种 Linux 文件系统最适合?目前,我有 xfs。但是,我在某处读到 xfs 的读取性能很差。这是真的吗?我应该将数据库转移到 ext3 文件系统吗?

谢谢

答案1

总体来说,目前两个不错的 Linux FS 是 XFS 和 EXT4,它们都是基于范围的文件系统。

我没有发现两者之间有什么重大差异,但都明显比 EXT3 好。

您能做的最好的事情可能是:

  • 禁用 atime (notatime挂载选项)
  • 将 MySQL 缓冲区增加到物理 RAM 的约 2/3(其余部分留给磁盘缓存)
  • 使用以下方法验证您的索引EXPLAIN SELECT ...
  • 转储文件系统并恢复已完全写入的文件,这轻微地减少碎片化

答案2

如果您非常重视 MySQL 数据库的性能,我强烈建议您在测试环境中进行自己的基准测试。文件系统性能在不同内核版本之间可能会有很大差异,选择可能在很大程度上取决于您的确切工作负载。

为了进行简单的比较,只需设置一个与生产系统具有相同内核版本的测试服务器,然后使用系统工作台对 xfs、ext3 和 ext4 进行基准测试。

为了获得更好的视图,您可以在测试服务器上恢复数据库的最新备份,并创建一些生成与您的工作负载类似的负载的脚本。

此外,每次您计划在生产机器上升级内核时,都应重新运行基准测试,以查看是否存在退化。由于此时您无法轻松切换文件系统(这取决于您的设置),因此您至少应确保升级后性能不会下降。

编辑:

顺便说一句,你可以在MySQL 性能博客

答案3

尝试 MySQLTuner 以了解您的问题所在。我认为是索引性能不佳或缓存命中率非常差。在不了解更多信息的情况下,可能对于您的数据集来说太小了。

wget mysqltuner.pl(通过重定向至实际脚本来修饰域名。)

和其他发帖者一样,我非常怀疑您的磁盘性能或文件系统选择是瓶颈。

答案4

实际数据库有多大?您提到了数百万行,但那并没有说明每行有多大。我的观点是,如果您不进行任何更新,并且这只是一个只读数据库,请考虑将其加载到内存中(假设它适合并且假设您有足够的 RAM)。

相关内容