MySQLコマンドでプロセスリストを表示:sleep


83

MySQLデータベースでSHOWPROCESSLISTを実行すると、次の出力が得られます。

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を示しているのですか?これによりデータベースが遅くなり、プロセスを強制終了すると、正常に機能します。私を助けてください。


そこに座って接続を「待機」するだけで、何もしません。
ルフィヌス2012

1
どのクエリが接続を待機しているかを見つけることができますか?私の質問は意味がありますか?なぜそれが私のデータベースの速度を低下させているのですか?
gthm 2012

8
接続を待機しているクエリではありません。タイムアウトが終了するのを待っている接続ポインタ。パフォーマンスには影響しません。すべての接続と同様に、使用するのは数バイトだけです。本当に最悪の場合、プールの1つの接続を使用します。コンソールクライアントを介して複数回接続し、接続を閉じずにクライアントを閉じると、すべての接続が使い果たされ、タイムアウトが再び接続できるようになるまで待つ必要があります。 ...しかし、これは非常にありそうにありません:-)
Rufinus 2012

2
@Rufinus、私は同じ問題を抱えています。なぜあなたは言うが、これは非常にありそうもないのですか?また、my.cnfの構成タイムアウトスリープ接続に関連するパラメーターはどれですか?
ハミドレザ2012年

1
@ hamidreza66はstackoverflow.com/questions/2407732/…およびdba.stackexchange.com/questions/1558/…を参照してください
Rufinus

回答:


75

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

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

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

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


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

25

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

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

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

(警告:これらの種類の接続のリストが長い場合、同時接続が不足する危険性があります。)


5

私はここでこの答えを見つけました:https//dba.stackexchange.com/questions/1558。つまり、以下を使用すると(またはmy.cnf内で)、タイムアウトの問題が解消されます。

SET GLOBAL interactive_timeout = 180; SET GLOBAL wait_timeout = 180;

これにより、接続が3分間(または定義したもの)スリープ状態のままである場合に接続を終了できます。


0

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.