2011-02-07 11 views
1

私のPHPコードと私のウェブサイトが永続的な接続を使用していないことを確認したいと思います。`SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST`の結果の理解

私がチェックするには、以下の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] => 
     ) 

) 

常に2つの配列が出力されるのはなぜですか? [COMMAND]のクエリ/スリープはどういう意味ですか? [STATE]では、最初の配列にexecutingと表示され、2番目の配列で空になりました。つまり、ページが送信されるとdb接続が切断されます。

また、[TIME] => 0 and [TIME] => 423 - それはどういう意味ですか?いくつかのキーがあるのはなぜ

は、私はちょうど...

おかげで、いくつかのダムの質問をしたかもしれないなど

申し訳

、など[HOST] => localhost:52246, [HOST] => localhost:52140, [ID] => 43, [ID] => 38など異なる値を表示します。

EDIT:

今、私は私が私のサイト上での周りをクリックしたときにそう、それは常に[STATE] => executingを返し

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 
     ) 

) 

、私のブラウザ上でのphpMyAdminを閉じた後の出力でこれを持っている - それはどういう意味私のサイトは常時接続していますか?

答えて

1

アイドル状態になっている(IDは同じで、スリープ時間はかなり長い)ユーザーrootから1つの接続が開いています。何かが開いていて、それを閉じていない(おそらく、PHPMyAdminなどからの閉じられていない接続)...

あなたのアプリケーションは同じ接続を使用していません(ID列から見ることができます)。限り、他の接続を試すことができますKILLそれを送信し、それが返されるかどうか見て。もしそうでなければ、私はあまり心配しないでしょう。

もう1つのことは、rootを使用してMySQLサーバーにログインしないでください。制限された権限を持つユーザーを作成し、PROCESS権限を与えます。しかし、これまでに全権を握ったユーザーとして接続しないでください...

+0

@ircmaxell: 'あなたは、かなりの時間アイドル状態になっているルートユーザーから1つの接続を開きます(IDは同じで、スリープ時間かなり高いです)。はい、私は[ID] => 38私は気付いていません、なぜ知っているのですか? – laukok

+0

@lauth:どこにいても接続していますか?おそらくコマンドライン?あなたはそれを殺そうとしましたか?あなたはサーバへのコマンドラインアクセスを持っていますか(その時点でnmapをチェックしてそのプロセスがそのポートを開いているかどうか確認できます)。 – ircmaxell

+0

@ircmaxell: 'どこにでも接続していますか?'私は本当に知りません!私はそのクエリ "SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST"を実行します。私のサイトのインデックスページの内側にあります。 rootユーザーとの1つの接続を開く必要がありますか? – laukok

0

(これはあなたのクエリで)それが言う正確に何を意味し、「スリープ」は、スレッドから新しいコマンドを待っていることを意味し「実行」MySQL Documentationは、すべてのこれらのフィールドのかなり包括的な説明を与える

州クライアント

関連する問題