Понимание результата `SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST` - PullRequest
1 голос
/ 07 февраля 2011

Я хочу убедиться, что мой 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] => 
        )

)

Почему всегда выводятся два массива? Что значит Query / Sleep в [COMMAND]? в [STATE] он говорит executing в первом массиве, затем становится пустым во втором массиве - означает ли это, что соединение БД отключается после отправки страницы.

Кроме того, [TIME] => 0 and [TIME] => 423 - что это значит?

Почему несколько клавиш отображают разные значения, такие как [HOST] => localhost:52246, [HOST] => localhost:52140, [ID] => 43, [ID] => 38 и т. Д.

Извините, я только что задал несколько глупых вопросов ...

Спасибо.

EDIT:

Теперь у меня есть это в выводе после закрытия 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 ]

1 голос
/ 07 февраля 2011

У вас есть одно открытое соединение от пользователя root, который простаивал в течение достаточно долгого времени (идентификатор тот же, а время ожидания довольно высокое).Что-то открылось и не закрылось (возможно, закрытое соединение из PHPMyAdmin или что-то в этом роде) ...

Ваше приложение не использует то же соединение (вы можете увидеть это в столбце ID),Что касается другого соединения, вы можете попробовать KILL в нем и посмотреть, вернется ли оно.Если этого не произойдет, я бы не слишком беспокоился об этом.

Еще одна вещь, не используйте root для входа на сервер MySQL.Создайте пользователя с ограниченными разрешениями и предоставьте разрешение PROCESS .Но никогда не подключайтесь как привилегированный пользователь ...

0 голосов
/ 07 февраля 2011

Документация MySQL дает довольно полное объяснение всех этих полей

Состояние 'Выполнение' означает именно то, что оно говорит (это ваш запрос), 'Сон' означает, что потокждет новой команды от клиента

...