5

这似乎是一个显而易见的问题,但我们有一个在 Windows 2008 服务器上运行的 PHP/MySQL 应用程序。该服务器总共运行了大约 10 个不同的站点。相关站点上的管理选项允许管理员(通过站点)运行巨大的报告,在某些情况下可能需要大约 10 分钟。这些报告是在屏幕上显示数据的巨大 mysql 查询。当这些报告运行时,所有用户的整个站点都会变慢。所以我的问题是:

  • 是否有一种简单的方法来分配服务器资源,因此如果(网站)管理员运行报告,其他用户仍然可以访问该网站而不会出现性能问题?
  • 即使运行报告会为该站点的所有用户终止该网站,但它不会影响同一服务器上的其他站点。这是为什么?
  • 如前所述,生成报告可能需要大约 10 分钟 - 在网站上提供此类报告是否是不好的做法?这些通常是由夜间计划任务生成的吗?

提前谢谢了。

4

4 回答 4

1

您放在服务器上的负载很可能与应用程序无关,但您可能正在抨击的 mysql 表。大多数人通过在停机时间生成报告或使用 mysql 复制来拥有一个纯粹用于报告的第二个数据库来解决这个问题。

我建议尝试进行一些服务器监控以查看实际情况。我认为 Newrelic 刚刚发布了其平台的 Windows 版本,我认为您可以免费试用 30 天。

于 2012-08-30T14:01:25.990 回答
0

我强烈建议您安装一个复制的 MySQL 服务器,然后在其上运行大型管理员查询(自然只选择),以避免您的网站被阻止的负担!如果每秒没有太多事务,您甚至可以从生产服务器远程在台式计算机上运行副本,从而在异地备份您的数据库!

于 2012-08-30T14:02:07.143 回答
0

LOW_PRIORITY标志,但我不确定这是否会产生任何积极影响,因为它很可能是您遇到的表/行锁定问题。SHOW PROCESSLIST;您可以通过使用查询来了解正在发生的事情。

如果其他网站运行良好,则更有可能是由于数据库锁定(导致您的 Web 进程等待锁定被释放)。

最后,始终建议在夜间(或在服务器负载最小时)运行大型报告查询。拥有一个读取复制的从属设备也会有所帮助。

于 2012-08-30T14:02:16.317 回答
0

100% 确定您已添加所有必要的索引吗?

除非您缺少索引,否则您需要拥有一个非常大的网站才能遇到此类问题。

确保你有正确的索引,并确保你没有 varchar 的连接字段,不是很快。

我有一个数据库,其中包含很多大表和数百万条全天候运行的记录。

由于适当的索引,有大量活动和自动化服务处理它而不会出现问题。

于 2012-08-30T14:16:45.590 回答