SHOW [FULL] PROCESSLIST
は、実行中のスレッドを表示します。
mysqladmin processlist
コマンドでもこの情報を取得できます。SUPER
権限があれば、すべてのスレッドを表示できます。この権限がない場合は、自分のスレッドのみ表示できます。
See 項4.6.7. 「KILL
構文」。 FULL
オプションを使用していない場合、各クエリの最初の
100 文字だけが表示されます。
4.0.12 以降、MySQL は TCP/IP 接続のホスト名を
hostname:client_port
形式で報告するので、どのクライアントが何を行っているかわかりやすくなっています。
このコマンドは、'too many connections'
エラーメッセージが表示され、原因を知りたいときに便利です。MySQL
は、SUPER
権限を持つクライアントのために 1
つの特別接続枠を予約しており、いつでもシステムにログインしてチェックできるようになっています(ユーザ全員にこの権限を与えていないようにしてください)。
mysqladmin processlist
で確認できる一般的な状態は以下のとおりです。
Checking table
スレッドがテーブルの自動チェックを実行している。
Closing tables
スレッドが、変更されたテーブルデータをディスクにフラッシュし、使用したテーブルを閉じている。これには通常それほど時間がかからない。時間がかかる場合、ディスクの使用率をチェックする必要がある。
Connect Out
マスタに接続しているスレーブ。
Copying to tmp table on disk
テンポラリ結果セットが
tmp_table_size
よりも大きく、スレッドがメモリベースのテンポラリテーブルをディスクベースに変更して、メモリの節約を図っている。
Creating tmp table
スレッドは、クエリの結果の一部を保持するためのテンポラリテーブルを作成中。
deleting from main table
複数テーブルを削除する最初の段階で、最初のテーブルを削除中。
deleting from reference tables
複数テーブルを削除する 2
番目の段階で、他のテーブルから、一致したレコードを削除中。
Flushing tables
スレッドが
FLUSH TABLES
を実行中。すべてのスレッドによりそのテーブルが閉じられるのを待っている。
Killed
誰かがスレッドを強制終了の命令を出したため、次回のキルフラグチェック時に強制終了される。MySQL
では大きな各ループでフラグがチェックされるが、それでもスレッド終了には少し時間がかかる場合がある。スレッドが他のスレッドによってロックされている場合、そのロックが解除されたところで強制終了が実行される。
Sending data
スレッドは
SELECT
ステートメントのレコードを処理中で、かつクライアントにデータを送信中。
Sorting for group
スレッドは、GROUP BY
のソートを実行中。
Sorting for order
スレッドは、ORDER BY
のソートを実行中。
Opening tables
スレッドがテーブルを開こうとしている。これは、何かが妨害していなければすぐに終わるはずである。たとえば、ALTER
TABLE
や LOCK TABLE
などにより、そのコマンドの終了時までテーブルが開かないことがある。
Removing duplicates
クエリで
SELECT DISTINCT
が使用されたが、MySQL
は初期段階で重複を除外する最適化を実行できなかった。このため、MySQL
は結果をクライアントに送信する前に、重複レコードを削除する段階を踏む必要がある。
Reopen table
スレッドはテーブルのロックを取得したが、ロック取得後、下のテーブル構造が変更されていることを認識した。このため、ロックを解除し、テーブルを閉じて、再び開こうとしている。
Repair by sorting
修復コードがソートを使用してインデックスを作成している。
Repair with keycache
修復コードが、キーキャッシュにより、キーを
1
つずつ作成している。これは、Repair
by sorting
よりも大幅に時間がかかる。
Searching rows for update
スレッドがレコード更新の初期段階として、更新対象の一致レコードを検索中である。レコード検索に使用するインデックスを
UPDATE
が変更すると、この段階が必要となる。
Sleeping
スレッドが、クライアントから新しいコマンドが送信されるのを待っている。
System lock
スレッドが、テーブルの外部システムロックを待っている。同じテーブルにアクセスする複数の
mysqld
サーバを使用していない場合、--skip-external-locking
オプションでシステムロックを無効にできる。
Upgrading lock
INSERT
DELAYED
ハンドラが、レコード挿入のためにテーブルをロックしようとしている。
Updating
スレッドが更新対象レコードを検索して更新している。
User Lock
スレッドが
GET_LOCK()
を待っている。
Waiting for tables
下のテーブル構造が変更されているため、テーブルを開き直して新しい構造を取得する必要があるという通知をスレッドが受け取った。テーブルを開き直すためには、他のすべてのスレッドがそのテーブルを閉じるのを待つ必要がある。
この通知は、他のスレッドがそのテーブルに対して
FLUSH TABLES
、FLUSH TABLES
table_name
、ALTER
TABLE
、RENAME
TABLE
、REPAIR
TABLE
、ANALYZE
TABLE
、OPTIMIZE TABLE
のいずれかを実行している場合に発生する。
waiting for handler insert
INSERT DELAYED
ハンドラがすべての挿入処理を完了し、新規の挿入を待機中である。
ほとんどの状態はすぐに終わります。何秒も同じ状態が続く場合は、問題のある可能性があるので、調査が必要です。
他にも説明していない状態がありますが、そのほとんどは
mysqld
のバグ発見に役立つものです。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.