我想确保我的php代码和我的网站不使用永久连接。
我使用下面的sql查询来检查,但我不太了解输出,
$sql = "SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST";
$items = $connection -> fetch_all($sql);
print_r($items);
以下是输出
Array
(
[0] => Array
(
[ID] => 43
[USER] => root
[HOST] => localhost:52246
[DB] => xxx_2010
[COMMAND] => Query
[TIME] => 0
[STATE] => executing
[INFO] => SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST
)
[1] => Array
(
[ID] => 38
[USER] => root
[HOST] => localhost:52140
[DB] =>
[COMMAND] => Sleep
[TIME] => 423
[STATE] =>
[INFO] =>
)
)
当我点击另一页时,
Array
(
[0] => Array
(
[ID] => 44
[USER] => root
[HOST] => localhost:52301
[DB] => xxx_2010
[COMMAND] => Query
[TIME] => 0
[STATE] => executing
[INFO] => SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST
)
[1] => Array
(
[ID] => 38
[USER] => root
[HOST] => localhost:52140
[DB] =>
[COMMAND] => Sleep
[TIME] => 1026
[STATE] =>
[INFO] =>
)
)
为什么总是输出两个数组? [COMMAND]
中的查询/睡眠是什么意思?在[STATE]
中,它在第一个数组中显示为executing
,然后在第二个数组中变为空 - 这是否意味着一旦页面被发送,数据库连接就会断开连接。
另外,[TIME] => 0 and [TIME] => 423
- 这是什么意思?
为什么有几个键会显示不同的值,例如[HOST] => localhost:52246, [HOST] => localhost:52140, [ID] => 43, [ID] => 38
等
抱歉,我可能刚问了一些愚蠢的问题......
感谢。
修改
现在我在浏览器上关闭phpMyadmin之后在输出中有了这个,
Array
(
[0] => Array
(
[ID] => 59
[USER] => root
[HOST] => localhost:53195
[DB] => xxx_2010
[COMMAND] => Query
[TIME] => 0
[STATE] => executing
[INFO] => SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST
)
)
因此,每当我点击我的网站时,它总会返回[STATE] => executing
- 这是否意味着我的网站处于永久连接状态?
答案 0 :(得分:1)
你有一个连接从root
用户打开已经闲置了很长时间(ID是相同的,睡眠时间非常长)。有东西打开并且没有关闭它(可能是PHPMyAdmin的未闭合连接,或类似的东西)......
您的应用程序未使用相同的连接(您可以从ID列中看到)。至于其他连接,您可以尝试KILL
并查看它是否返回。如果没有,我不会太担心它。
另一件事,不要使用root
登录MySQL服务器。创建权限有限的用户,并授予PROCESS权限。但是,不要作为一个完全没有用户的用户连接......
答案 1 :(得分:0)
MySQL Documentation给出了所有这些字段的非常全面的解释
状态'执行'意味着它所说的(这是你的查询),'睡眠'意味着线程正在等待来自客户端的新命令