2012-08-30 8 views
53

、私はこの出力を得る:SHOWのPROCESSLIST:私はMySQLデータベースでSHOW PROCESSLISTを実行すると、睡眠

mysql> show full processlist; 

+--------+------+-----------+--------+---------+-------+-------+-----------------------+ 
| Id  | User | Host  | db  | Command | Time | State | Info     | 
+--------+------+-----------+-------+---------+-------+-------+-----------------------+ 
| 411665 | root | localhost | somedb | Sleep | 11388 |  | NULL     | 
| 412109 | root | localhost | somedb | Query |  0 | NULL | show full processlist | 
+--------+------+-----------+-------+---------+-------+-------+------------------------+ 

私が指揮下にあるプロセス「スリープ」を知っていると思います。どういう意味ですか?なぜそれが長い時間以来実行され、NULLを表示していますか?データベースが遅くなり、プロセスを終了すると正常に動作します。私を助けてください。

+0

それはただそこに座って接続を待っているものは何もしません。 – Rufinus

+1

接続を待っているクエリを見つけることはできますか?私の門はある意味がありますか?それはなぜ私のデータベースの速度を遅くしていますか? – gthm

+0

あなたのデータベースは本当に*遅くなっていますか?それは何もしない。その基本的な接続は何もしていません - 例えば、おそらくあなたは別の端末に接続していて、もう一度接続を切断しませんでした。 – BugFinder

答えて

41

それは、それを待っ接続ポインタの接続を待っているクエリのいません終了するタイムアウト

パフォーマンスへの影響はありません。それが使用している唯一のものは、すべての接続が行うように数バイトです。

コンソールクライアントから複数回接続し、接続を閉じずにクライアントを閉じるだけで、すべての接続を使い切ることができ、タイムアウトを待たなければならないもう一度接続することはできますが、これはほとんど起こりそうにないでしょう:-)

詳細については、MySql Proccesslist filled with "Sleep" Entries leading to "Too many Connections"?https://dba.stackexchange.com/questions/1558/how-long-is-too-long-for-mysql-connections-to-sleepを参照してください。

+0

データベースへの接続が制限されている場合に問題が起こる可能性があります。これらの接続でさえパフォーマンスに影響を与えないため、接続としてカウントされます。 – mrded

14

"スリープ"状態の接続は、ほとんどの場合、データベースへの永続的な接続を維持するコードによって作成されます。

これには、アプリケーションフレームワークによって作成された接続プール、またはクライアント側のデータベース管理ツールが含まれます。

コメントの上で述べたように、実際に接続がどこから来ているのか分からない限り、これらの接続について心配する理由はありません。

(CAVEAT:あなたは接続のこれらの種類の長いリストを持っていた場合、同時接続が不足する危険性があるかもしれません。)

0

スレッドが何もしないことを意味するスリープ。 時間が長すぎてスレッドクエリを実行できませんが、サーバを切断しないでください。 デフォルトのwait_timeout = 28800;したがって、値を小さく設定できます。例えば、スレッドを強制終了できます。