如何配置 mysql-server 以应对高负载

如何配置 mysql-server 以应对高负载

我正在设置一个新的数据库服务器。我之前已经运行过几个 mysql 数据库服务器,运行良好。

但我想听听针对我的服务器的推荐设置。例如,我应该如何设置最大连接数、query_cache_size、table_cache 等等。

我每秒大约有 4-600 个:

打开表:每秒 112 个查询,平均:430.386。

我正在设置的服务器具有以下配置:

Linux 版本 2.6.32-5-amd64(Debian 2.6.32-41squeeze2)

2 个英特尔至强 X3440 @ 2.53GHz

4GB 内存

软件 RAID1、2x 7200RPM SATA 上的 /、/boot、/tmp 等

数据位于软件 RAID0、2x7200RPM SATA 上

我打算将 mysql 数据库放在 RAID0 上。

我遗漏了什么吗?请告诉我!

提前谢谢您,我期待您的回复 :-)

/拉斯穆斯

答案1

如果不知道工作量类型、数据量和使用模式,就不可能给出任何好的答案。老实说,即使你对这些有所了解,最后你也必须自己找出最有效的方法。这意味着大量的基准测试,追踪内部发生的情况,定期检查慢查询日志ETC。

mysql 的默认设置对于现代硬件来说并不是真正最佳的,作为一个合理的起点,你可以使用percona 的 mysql 配置向导或者mysqltuner.pl

很可能 inodb 作为存储引擎在您的情况下会更理想。只有 4GB 的内存是相当少的 [但我不知道您的数据集的总大小是多少]。2x Xeon X3440 就 CPU 能力而言很多,您最好拥有大量并发流量并能够将所有数据放入内存中,否则您将无法充分利用可用的处理器,只是等待磁盘读取/写入数据。

附注:raid0 上的数据?我希望您确实有具有实时复制的热备用服务器,或者数据根本不重要。

答案2

RAID0 又名条带,对于数据库来说非常危险。对于其他所有东西也是如此。一个磁盘丢失 - 一切都丢失。条带比单磁盘和其他 RAID 稍快,但风险太大。

答案3

什么鬼?你把性能不重要的内容/容易恢复的内容放在镜像中,而性能关键、易失性的数据放在 JBOD 上???漏掉了什么?你完全搞反了。

这是这里第一个也是最明显的问题。如果你真的有 4 个磁盘,并且假设这是某种 OLTP 应用程序,那么我会选择类似...

disk1  [md0][md1  ][md2          ]
disk2  [md0][md1  ][md2          ]
disk3  [sw0][md3                 ]
disk4  [sw1][md3                 ]

其中启动在 md0 上,根在 md1 上,数据分布在 md2 和 md3 上(其中 md0...3 是 RAID1)。磁盘 3 和 4 上有非镜像 RAID(您可以考虑将日志放在它们自己的分区中,而不是 sw1 中)。

OLAP 类型系统的设置将会非常不同。

您可能还需要花一些时间考虑在数据分区上运行的文件系统(xfs 可能是安全的选择)。

至于调整 mysql 实例 - 这取决于您存储的数据以及访问数据的方式。阅读手册中的调整部分并获取 myqltuner.pl 和/或 Percona 工具包。但首先您需要决定 innodb 或 myisam 是否更适合您 - 这同样取决于数据的布局及其访问方式。

答案4

对于基本统计数据和建议,您可以从mysqltuner.pl脚本开始。不要盲目地采纳建议,因为这可能会降低性能。

MySQLTuner Github 页面

对于扩展支持和常见建议/调整,值得查看 Percona 官方地点和他们的博客

相关内容