当大型MySQL查询运行时,网站响应速度慢(所有其他用户)

时间:2012-08-30 13:55:29

标签: php mysql

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

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

非常感谢提前。

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

最后,始终建议在一夜之间(或当服务器负载最小时)运行大型报告查询。拥有read replicated slave也会有所帮助。

答案 3 :(得分:0)

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

除非您缺少索引,否则您需要拥有一个疯狂的大型网站来解决此类问题。

确保您拥有正确的索引,并确保您没有varchar的连接字段,而且速度不是很快。

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

由于正确的索引,有大量的活动和自动化服务处理它没有问题。