在执行Mysql查询时无法加载站点

时间:2017-11-20 23:12:59

标签: php mysql apache2

我在一台机器上安装了MySQL 5.7服务器。 网站在其他机器上。

虽然我尝试F5 20倍PHP mysql脚本需要1秒才能执行它会冻结整个网站为大家持续20秒

我试过在nginx,apache2上运行这个,所以我想它的mysql或网站问题。

查询可以是简单的循环SELECT,我使用mysqli_query

当我检查FULL PROCESSLIST时,它只显示了一个网站用户进程,它全部在队列中执行,直到我停止刷新,主要问题是其他用户在我执行时无法加载网站。

1 个答案:

答案 0 :(得分:0)

只有一个PHP进程可以一次打开一个给定的会话,所有后续尝试打开该会话的请求都将阻塞,直到它被关闭。导致您所描述的问题。

如果您在会话中拥有所需的一切,并且不打算再写任何内容,那么您可以致电session_write_close()以释放其他请求的会话。

例如:

<?php
session_start();

// init

session_write_close();

$dbh->query('SELECT super_long_time_stuff FROM foo');

编辑:值得注意的是,这不会导致“所有用户”无法加载网页,只会通过发出长时间运行的请求来锁定自己的会话。