MySQL 纵向扩展还是横向扩展?

non*_*ter 0 mysql optimization performance scale

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

Web 应用程序本身部分是用 PHP 编写的,部分是用 Perl 编写的,而且我们有一个 MySQL 数据库,我认为这是性能下降的根源。

我们的系统有大约 400 个用户,其中大多数分布在不同的时区,因此通常一次最多只有 30 个用户在线。性能问题已经悄然出现在我们面前,尤其是在过去的一年里,随着数据库的不断增长。

该系统在一台 32 位 Debian 服务器上运行 - 6GB RAM,具有 8 x 2.4GHz intel CPU。对于手头的工作来说,这可能不够重。然而,即使有时我是唯一在线用户,页面加载时间仍然可能很慢。

我正在尝试确定我们是否需要纵向扩展或横向扩展。首先,我想知道我们的硬件能否很好地应对对其提出的要求。其次,是否值得横向扩展并创建一些复制从属服务器来平衡负载。

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

非常感谢, ns

Bra*_*vic 5

您的速度下降似乎与数据有关,而不是与并发用户数有关。

正确索引的查询往往会随着数据量成对数缩放 - 即,将数据加倍会增加查询时间某个常数 C,将数据再次加倍相同的 C,再次加倍相同的 C 等等......在您意识到之前,你有大量的数据,但你的查询速度有点

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

  1. 测量实际数据的查询性能以识别慢查询。
  2. 检查执行计划是否有可能的改进。
  3. 如有必要,了解索引、聚类、覆盖和其他性能技术。
  4. 最后,将这些知识应用于您在步骤 (1) 和 (2) 中确定的查询。

如果没有其他帮助,请考虑您的数据模型。有时,“完美”的规范化模型并不是表现最好的模型,因此可能需要进行一点司法非规范化。