MySQL向上扩展还是向外扩展?

时间:2012-04-04 17:04:48

标签: mysql performance optimization scale

我的任务是调查我们的内部Web应用程序遇到性能问题的原因。

Web应用程序本身是用PHP编写的,部分用Perl编写的,我们有一个MySQL数据库,我相信性能影响源正在发生。

我们有大约400个系统用户,其中大多数分布在不同的时区,因此通常一次最多只有30个用户在线。随着数据库的不断发展,性能问题在我们身上蔓延,特别是在过去的一年里。

系统在一台32位debian服务器上运行 - 6GB内存,8 x 2.4GHz intel CPU。这对于手头的工作来说可能不够大。但是,即使在我是唯一在线用户的情况下,页面加载时间仍然很慢。

我正在尝试确定是否需要扩展或扩展。首先,我想知道我们的硬件是如何应对它的要求的。其次,是否值得扩展并创建一些复制从属以平衡负载。

互联网上有很多工具 - 可能有点太多无法调查。任何人都可以推荐任何可以提供一些性能分析/性能监控的工具,这些工具可以帮助我完成任务。

非常感谢, ns

2 个答案:

答案 0 :(得分:4)

您的减速似乎与数据有关,而与并发用户的数量无关。

正确索引的查询倾向于与数据量成对数比例 - 即数据加倍会使查询时间增加一些常数C,再次将数据加倍相同的C,再次加倍相同的C等等......知道它,你有大量的数据,但你的查询只是慢。

如果在您的情况下减速不是那么渐进(即它与数据量呈线性关系,或更糟),这可能表明查询质量不佳。在问题上投入更多的铁会推迟它,但除非你有无限的预算,否则你必须在某个时候真正解决根本原因:

  1. 衡量对实际数据的查询效果,以识别慢查询。
  2. 检查执行计划以寻求可能的改进。
  3. 如有必要,请了解indexing, clustering, covering和其他演奏技巧。
  4. 最后,将这些知识应用于您在步骤(1)和(2)中确定的查询。
  5. 如果没有其他帮助,请考虑您的数据模型。有时,“完美”规范化的模型并不是表现最好的模型,因此可能需要进行一些司法非规范化。

答案 1 :(得分:2)

如果你有预算,简单(懒惰)的方式只是为它增加一些铁。

在决定在何处或如何扩展之前,更好的方法是识别瓶颈。是否每个页面加载都很慢?或者只是特定的页面?如果它只是几页,那么投资一个分析器(对于PHP,xDebug和Zend Debugger都可以进行分析)。我也会(如果你还没有)投资一个与现场系统尽可能相似的测试系统来运行诊断。

你也可以看一下收集一些统计数据;在服务器级别使用诸如sar(from the sysstat package之类的程序以及数据库级别(您是否运行了慢查询日志?)。