92

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 | 
+--------+------+-----------+-------+---------+-------+-------+------------------------+

Command の下にあるプロセス「Sleep」について教えてください。どういう意味ですか?長い間実行されていて、NULL を表示しているのはなぜですか? データベースが遅くなり、プロセスを強制終了すると正常に動作します。私を助けてください。

4

4 に答える 4

84

接続待ちのクエリではありません。タイムアウトが終了するのを待っている接続ポインターです。

パフォーマンスへの影響はありません。使用しているのは、すべての接続と同様に数バイトだけです。

本当に最悪のケース: プールの 1 つの接続を使用しています。コンソールクライアントを介して複数回接続し、接続を閉じずにクライアントを閉じると、すべての接続を使い果たし、再度接続できるようになるまでタイムアウトを待たなければならない可能性があります...しかし、これはほとんどありません:-)

「接続が多すぎます」につながる「スリープ」エントリで満たされた MySql プロセスリストを参照してください。詳細については、https://dba.stackexchange.com/questions/1558/how-long-is-too-long-for-mysql-connections-to-sleepを参照してください。

于 2013-01-04T14:36:00.713 に答える
28

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

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

上記のコメントで述べたように、これらの接続について心配する必要はまったくありません...もちろん、接続がどこから来ているのかわからない場合を除きます。

(注意: この種の接続の長いリストがある場合は、同時接続が不足する危険性があります。)

于 2013-01-03T20:12:15.003 に答える
0

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

于 2013-05-23T03:22:40.357 に答える