理解`SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST`的结果

时间:2011-02-07 16:23:04

标签: php mysql database-connection processlist

我想确保我的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 - 这是否意味着我的网站处于永久连接状态?

2 个答案:

答案 0 :(得分:1)

你有一个连接从root用户打开已经闲置了很长时间(ID是相同的,睡眠时间非常长)。有东西打开并且没有关闭它(可能是PHPMyAdmin的未闭合连接,或类似的东西)......

您的应用程序未使用相同的连接(您可以从ID列中看到)。至于其他连接,您可以尝试KILL并查看它是否返回。如果没有,我不会太担心它。

另一件事,不要使用root登录MySQL服务器。创建权限有限的用户,并授予PROCESS权限。但是,不要作为一个完全没有用户的用户连接......

答案 1 :(得分:0)

MySQL Documentation给出了所有这些字段的非常全面的解释

状态'执行'意味着它所说的(这是你的查询),'睡眠'意味着线程正在等待来自客户端的新命令