0

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

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

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

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

我正在尝试确定我们是否需要扩大规模或扩大规模。首先,我想知道我们的硬件在满足对它的要求方面做得如何。其次,是否值得横向扩展并创建一些复制从属服务器来平衡负载。

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

非常感谢, ns

4

2 回答 2

5

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

正确索引的查询倾向于与数据量成对数缩放 - 即数据加倍会使查询时间增加一些常数 C,将数据再次加倍相同的 C,再次加倍相同的 C 等等......在你知道之前,你有大量的数据,但你的查询速度有点慢。

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

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

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

于 2012-04-04T18:20:55.733 回答
2

如果你有预算,简单(懒惰)的方法就是多加点铁。

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

您还可以查看收集一些统计数据;在服务器级别使用诸如 sar 之类的程序(来自 sysstat 包,也可以在 db 级别(您是否运行了慢查询日志?)。

于 2012-04-04T17:11:52.263 回答