2013-03-06 41 views
0

我得到了一个PHP应用程序,导致MySQL的性能问题。会发生什么事情是这样的:数据库条目延伸一定数量后;它开始随机超时PHP页面300秒。PHP和MySQL - 导致超时300秒的查询很多

我知道我必须重写我的代码,因为它很杂乱,过时,而且我基本上运行了很多可能更有效的查询。

但是,我很好奇什么能够导致这种情况,以及是否有短期的解决方案。 php应用程序可以很好地工作,但在浏览一些页面后,查询结果的行为应该像它应该一样,有时加载时间会变为300秒。之后,带有数据库结果的页面将完美显示。之后,我可以再次查看一些页面,之后该过程会随机重新开始。在加载页面的300秒期间,SQL进程列表在完整加载时间内显示命令“Sleep”,不附加任何查询。

+0

你的意思是说有时候会出现问题,有时候不是吗? – Voitcus 2013-03-06 15:15:59

+0

@Voitcus,正确的,每个页面加载都会发生问题。没有逻辑背后,有时它发生在1页面加载后,有时在10之后,等等。 – sv88 2013-03-06 15:17:49

+0

默认情况下,PHP.ini设置指定如果页面尚未完成由服务器处理,则发生超时。您可以使用以下方法更改此值:http://php.net/manual/fr/function.set-time-limit.php – sdespont 2013-03-06 15:19:33

回答

0

假设问题真的与MySQL相关,您可以尝试为MySQL服务器分配更多的内存并查看性能是否提高。看到这里的“庞大”的my.cnf配置:

http://fts.ifac.cnr.it/cgi-bin/dwww/usr/share/doc/mysql-server-5.0/examples/my-huge.cnf.gz

另外,如果你不需要InnoDB的功能,但你的数据库是InnoDB的,你可以切换到MyISAM和获得一些性能。

你还应该检查会话锁定和碰撞,这有时会造成超时。只要读取/写入数据,就应该释放会话,因为会话文件一直处于锁定状态,直到关闭会话或脚本结束。

+0

这可能是一条很好的路径。虽然关闭并重新打开浏览器(或在另一个浏览器中访问应用程序),但浏览器会话期间该应用程序会超时并且无法从该会话访问,直到再次发生超时为止。 – sv88 2013-03-06 16:13:05

+0

现货!非常感谢你=)我调用session_write_close()后问题解决了;在我完成脚本开始时检查用户会话后。 – sv88 2013-03-06 16:19:24