Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 运行大型MySQL查询时网站响应慢(所有其他用户)_Php_Mysql - Fatal编程技术网

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

Php 运行大型MySQL查询时网站响应慢(所有其他用户),php,mysql,Php,Mysql,这似乎是一个显而易见的问题,但我们有一个在Windows2008Server上运行的PHP/MySQL应用程序。该服务器总共有大约10个不同的站点在运行。该站点上的管理选项允许管理员在该站点上运行报告,这些报告非常庞大,在某些情况下可能需要10分钟。这些报告是在屏幕上显示数据的大型mysql查询。当这些报告运行时,所有用户的整个站点都会变慢。因此,我的问题是: 是否有一种简单的方法来分配服务器资源,以便在网站管理员运行报表时,其他用户仍可以访问该网站而不会出现性能问题? 即使运行该报告会为该站点

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

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

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


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

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

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

如果其他网站运行良好,则更有可能是由于数据库锁导致web进程等待释放锁


最后,建议在夜间或服务器负载最小时运行大型报告查询。有一个索引也会有帮助。

你100%确定你已经添加了所有必要的索引吗

除非你缺少索引,否则你需要一个非常大的网站来解决这类问题

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

我有一个数据库,有很多大的表和数百万条记录,全天候工作


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

检查表锁定?如果管理员锁定表,它可能会为其他请求创建一个队列。在加载过程中检查状态。很明显,由于MySQL上的一个查询是单线程的,可能是因为您的查询是网站使用的锁定表,无论是隐式的还是显式的。首先,查询是否经过良好编程、结构化和优化?桌子呢?指数呢?你能利用临时表来加速这一切吗?或者在其他地方复制数据库?感谢您的回复。在阅读了您的评论之后,我研究了表锁定,并意识到我可能应该提到导致问题的大型报告只是读取数据,而不是编写任何内容。因此,我假设这排除了锁定表理论?该系统是一个广泛使用的开源应用程序,因此我假设大多数索引都已就绪。我的工作是定制它,并从中获取它不会生成“开箱即用”的报告。我认为问题在于查询的规模——它非常复杂,包含大量的连接、子查询和子查询!您在哪里有子查询?如果它们在WHILE语句中,您将遇到问题。也许您不需要运行一个查询,而是需要使用多个查询或一个过程。不,所有查询都在MySQL查询中。谢谢你的建议,我读了更多,我有点困惑。如前所述,大型查询只读取数据,不写入数据。默认情况下,mysql SELECT语句是否锁定表?我在MySQL Workbench中查看流程列表,所有的大查询显示“发送数据”的时间都很长。我宁愿避免重复的从属/隔夜查询,但这听起来可能是必要的-谢谢你的建议。@paul78好吧,MyISAM可能会;InnoDB使用行级锁定,但我不确定您运行的是什么如果我们将数据复制到同一服务器上的另一个数据库,这个新数据库是否会读取、锁定,并且还会导致o 其他主要数据库?