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 lockINSERT 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 insertINSERT DELAYEDハンドラがすべての挿入処理を完了し、新規の挿入を待機中である。ほとんどの状態はすぐに終わります。何秒も同じ状態が続く場合は、問題のある可能性があるので、調査が必要です。
タグ: #MySQL
1年前 | 固定リンク | 2011年 1月 26日 | 
