プロセスリストのmysqlスリープステータスプロセスについて心配する必要がありますか


回答:


17

私たちの最も強力な人でさえ、時々眠る必要があります。睡眠がなければ不安になり、不眠症はあらゆる種類の深刻な症状を引き起こす可能性があります。

より真剣に:スリープ状態とは、MySQLプロセスがそのクエリを実行したが、クライアント側がまだ終了していないことを意味します。多くのWebアプリケーションは後で接続をクリーンアップしないため、MySQLプロセスがスリープ状態になります。それらがほんの一握りであっても心配しないでください。MySQLは、構成可能なタイムアウト期間(wait_timeout)の後でそれらをクリーンアップします。

または、Webアプリケーションが永続的な接続と接続プーリングを使用している場合、スリープ状態のプロセスがたくさんあることは完全に正常です。その場合、アプリケーションは、たとえば100のSQL接続を開いて開いたままにします。これにより、接続のオープン/クローズのオーバーヘッドが削減されます。アプリケーションが非常にビジーなものでない限り、ほとんどすべてのSQLプロセスが処理を行うわけではないため、スリープ状態になります。


5

いいえ、何千もない限り、心配する必要はありません。通常、これらは現在何も実行していないデータベース接続を示していますが、それ以外はまだ生きています。

多くのWebサイトは、ページの処理の最初にデータベース接続が開かれ、ページの生成全体で使用され、最後に最後に破棄されるように構築されています。破棄が適切に行われると、データベース接続が閉じられ、サーバーは関連するスレッドを強制終了します。つまり、この接続はプロセスリストから削除されます。

接続が閉じられていない場合、タイムアウトになるまで「スリープ」状態のままになることがあります。その場合、多くのスリーププロセスが発生する可能性があります。しかし、dbサーバーでメモリの問題が発生しない限り、これも大きな問題ではありません。


3

max_connections変数を増やす前に、show processlistコマンドを実行して、非インタラクティブ接続の数を確認する必要があります。

多くのスリープ接続がある場合は、「wait_timeout」変数の値を減らして、しばらく待機した後に非インタラクティブ接続を閉じる必要があります。

  • wait_timeout値を表示するには:
SHOW SESSION VARIABLES LIKE 'wait_timeout';

+ --------------- + ------- +
| 変数名| 値|
+ --------------- + ------- +
| wait_timeout | 28800 |
+ --------------- + ------- +

値は秒単位です。これは、非インタラクティブ接続がまだ最大8時間であることを意味します。

  • 「wait_timeout」変数の値を変更するには:
SETセッションwait_timeout = 600;
クエリは正常、0行が影響を受けた(0.00秒)

10分後、スリープ接続がまだmysqlまたはMariaDBをスリープしている場合は、その接続をドロップします。

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