我在一台机器上安装了MySQL 5.7服务器。 网站在其他机器上。
虽然我尝试F5 20倍PHP mysql脚本需要1秒才能执行它会冻结整个网站为大家持续20秒
我试过在nginx,apache2上运行这个,所以我想它的mysql或网站问题。
查询可以是简单的循环SELECT,我使用mysqli_query
当我检查FULL PROCESSLIST时,它只显示了一个网站用户进程,它全部在队列中执行,直到我停止刷新,主要问题是其他用户在我执行时无法加载网站。
答案 0 :(得分:0)
只有一个PHP进程可以一次打开一个给定的会话,所有后续尝试打开该会话的请求都将阻塞,直到它被关闭。导致您所描述的问题。
如果您在会话中拥有所需的一切,并且不打算再写任何内容,那么您可以致电session_write_close()
以释放其他请求的会话。
例如:
<?php
session_start();
// init
session_write_close();
$dbh->query('SELECT super_long_time_stuff FROM foo');
编辑:值得注意的是,这不会导致“所有用户”无法加载网页,只会通过发出长时间运行的请求来锁定自己的会话。