次のリストは、レプリケーションなどの特殊なアクティビティーではなく、一般的なクエリーの処理に関連付けられた、スレッドの State
値を説明しています。 これらの多くは、サーバーのバグを見つけるためにのみ役立ちます。
-
これは、スレッドがテーブル (内部一時テーブルも含む) を作成する際の、テーブルを作成する関数の最後に発生します。 何らかのエラーのためテーブルを作成できなかった場合でも、この状態が使われます。
-
サーバーはインプレース
ALTER TABLE
の実行中です。 -
スレッドは
MyISAM
テーブルのキー分布を計算しています (ANALYZE TABLE
などで)。 -
スレッドは、サーバーがステートメントを実行するために必要な権限を持っているかどうかを確認しています。
-
スレッドはテーブルチェック操作を実行しています。
-
スレッドは 1 つのコマンドを処理し、メモリーの解放と特定の状態変数のリセットを準備しています。
-
スレッドは、変更されたテーブルデータをディスクにフラッシュし、使用されたテーブルをクローズしています。 これは高速の操作であるはずです。 そうでない場合は、ディスクがいっぱいでないか、ディスクが著しく頻繁に使用されていないかを確認してください。
-
スレッドは内部一時テーブルを
MEMORY
テーブルからディスク上のテーブルに変換しています。 -
スレッドは
ALTER TABLE
ステートメントを処理しています。 この状態は、新しい構造でテーブルが作成されたあと、ただし、それに行がコピーされる前に発生します。この状態のスレッドの場合、パフォーマンススキーマを使用してコピー操作の進行状況を取得できます。 セクション27.12.5「パフォーマンススキーマステージイベントテーブル」を参照してください。
-
ステートメントの
ORDER BY
とGROUP BY
の基準が異なる場合、行はグループによってソートされ、一時テーブルにコピーされます。 -
サーバーはメモリー内の一時テーブルにコピーしています。
-
サーバーはディスク上の一時テーブルにコピーしています。 一時結果セットが大きくなりすぎました (セクション8.4.4「MySQL での内部一時テーブルの使用」を参照してください)。 その結果、スレッドは一時テーブルをインメモリーからディスクベースのフォーマットに変更して、メモリーを節約します。
-
スレッドは
MyISAM
テーブルに対するALTER TABLE ... ENABLE KEYS
を処理しています。 -
スレッドは内部一時テーブルを使用して解決される
SELECT
を処理しています。 -
スレッドはテーブルを作成しています。 これには一時テーブルの作成が含まれます。
-
スレッドはメモリー内またはディスク上に一時テーブルを作成しています。 テーブルがメモリー内に作成され、後でディスク上のテーブルに変換される場合、その操作中の状態は
Copying to tmp table on disk
です。 -
committing alter table to storage engine
サーバーはインプレース
ALTER TABLE
を終了し、結果をコミットしています。 -
サーバーは複数テーブル削除の最初の部分を実行しています。 最初のテーブルからのみ削除し、別の (参照) テーブルからの削除に使用されるカラムとオフセットを保存しています。
-
deleting from reference tables
サーバーは複数テーブル削除の 2 番目の部分を実行しており、別のテーブルから一致した行を削除しています。
-
スレッドは
ALTER TABLE ... DISCARD TABLESPACE
またはALTER TABLE ... IMPORT TABLESPACE
ステートメントを処理しています。 -
これは、
ALTER TABLE
、CREATE VIEW
、DELETE
、INSERT
、SELECT
、またはUPDATE
ステートメントの最後、ただしクリーンアップの前に発生します。end
状態では、次の操作が行われることがあります。バイナリログへのイベントの書き込み
BLOB 用を含むメモリーバッファーの解放
-
スレッドはステートメントの実行を開始しました。
-
スレッドは
init_command
システム変数の値のステートメントを実行しています。 -
スレッドはコマンドを実行しました。 通常、この状態のあとは
cleaning up
になります。 -
サーバーは自然言語全文検索を実行する準備をしています。
-
これは、
ALTER TABLE
、DELETE
、INSERT
、SELECT
、またはUPDATE
ステートメントの初期化の前に発生します。 この状態のサーバーによって実行されるアクションには、バイナリログとInnoDB
ログのフラッシュが含まれます。 -
だれかがスレッドに
KILL
ステートメントを送っており、スレッドは次に強制終了フラグをチェックしたときに中止するはずです。 フラグは MySQL の各主要ループ内でチェックされますが、場合によってはスレッドが停止するまでに少し時間がかかる場合があります。 スレッドがほかのスレッドにロックされている場合、強制終了はほかのスレッドがそのロックを解除するとすぐに有効になります。 -
スレッドがシステムテーブル (タイムゾーンやログテーブルなど) をロックしようとしています。
-
スレッドはステートメントを低速クエリーログに書き込んでいます。
-
クライアントが正常に認証されるまでの接続スレッドの初期状態です。
-
サーバーはテーブルインデックスを有効または無効にしています。
-
スレッドがシステムテーブル (タイムゾーンやログテーブルなど) を開こうとしています。
-
スレッドはテーブルをオープンしようと試みています。 これは、何かにオープンを妨げられないかぎり、きわめて高速な手順であるはずです。 たとえば、
ALTER TABLE
またはLOCK TABLE
ステートメントは、そのステートメントが終了するまでテーブルのオープンを妨げることがあります。table_open_cache
値が十分に大きいことをチェックすることも価値があります。システムテーブルの場合は、かわりに
Opening system tables
の状態が使用されます。 -
サーバーはクエリーの初期最適化を実行しています。
-
この状態はクエリーの最適化中に発生します。
-
スレッドは不要なリレーログファイルを削除しています。
-
この状態は、クエリーを処理したあと、ただし
freeing items
状態の前に発生します。 -
サーバーはクライアントからパケットを読み取っています。
-
クエリーは、MySQL が早い段階で個別の操作を最適化できなくなるような方法で
SELECT DISTINCT
を使用していました。 このため、MySQL は結果をクライアントに送る前にすべての重複した行を削除するための追加の段階を必要とします。 -
スレッドは
SELECT
ステートメントを処理したあとに内部一時テーブルを削除しています。 一時テーブルが作成されなかった場合、この状態は使用されません。 -
スレッドはテーブルの名前を変更しています。
-
スレッドは
ALTER TABLE
ステートメントを処理しており、新しいテーブルを作成し、元のテーブルを置き換えるためにその名前を変更しています。 -
スレッドはテーブルのロックを取得しましたが、ロックの取得後、基盤となるテーブル構造が変更されたことを認識しました。 それはロックを解除し、テーブルをクローズして、再度オープンしようとしています。
-
修復コードはインデックスを作成するためにソートを使用しています。
-
サーバーはインプレース
ALTER TABLE
の実行を準備しています。 -
スレッドは
MyISAM
テーブルのマルチスレッド修復を完了しました。 -
修復コードはキーキャッシュ経由で、1 つずつキーの作成を使用しています。 これは
Repair by sorting
よりはるかに遅くなります。 -
スレッドはトランザクションをロールバックしています。
-
MyISAM
テーブルの修復や分析などの操作で、スレッドは新しいテーブルの状態を.MYI
ファイルヘッダーに保存しています。 状態には、行の数、AUTO_INCREMENT
カウンタ、キー分布などの情報が含まれています。 -
スレッドは、すべての一致する行を更新する前に、それらを見つけるための第 1 フェーズを実行しています。 これは、
UPDATE
が、関連する行を見つけるために使用されるインデックスを変更している場合に、実行される必要があります。 -
Sending data
スレッドは
SELECT
ステートメントの行を読み取り、処理して、データをクライアントに送信しています。 この状態で行われる操作は、大量のディスクアクセス (読み取り) を実行する傾向があるため、特定のクエリーの存続期間にわたる最長時間実行状態になることがあります。 -
サーバーがクライアントにパケットを書き込んでいます。
-
スレッドは
ALTER TABLE
操作を開始しています。 -
スレッドは
GROUP BY
を満たすためにソートを実行しています。 -
スレッドは
ORDER BY
を満たすためにソートを実行しています。 -
スレッドは
MyISAM
テーブルの最適化操作中に、より効率的なアクセスのためにインデックスページをソートしています。 -
SELECT
ステートメントの場合、これはCreating sort index
と似ていますが、非一時テーブルに対するものです。 -
ステートメントの実行開始時の最初のステージ。
-
サーバーはクエリー実行プランを開発するための統計を計算しています。 スレッドが長期間この状態にある場合、サーバーはディスクに依存してほかの作業を実行している可能性があります。
-
スレッドが
mysql_lock_tables()
を呼び出しましたが、以降スレッドの状態は更新されていません。 これは、多くの理由で発生する可能性がある非常に一般的な状態です。たとえば、スレッドがリクエストしようとしているか、テーブルの内部または外部システムロックを待機しています。 これは、
InnoDB
がLOCK TABLES
の実行中にテーブルレベルのロックを待機している場合に発生することがあります。 この状態が外部ロックへのリクエストによって発生しており、同じMyISAM
テーブルにアクセスしている複数の mysqld サーバーを使用していない場合、--skip-external-locking
オプションによって外部システムロックを無効にできます。 ただし、外部ロックはデフォルトで無効になっているため、このオプションは無効になっている可能性があります。SHOW PROFILE
の場合、この状態はスレッドがロックをリクエストしている (待機しているのではなく) ことを意味します。システムテーブルの場合は、かわりに
Locking system tables
の状態が使用されます。 -
スレッドはテーブルの更新を開始する準備ができています。
-
スレッドは更新する行を探していて、それらを更新しています。
-
サーバーは複数テーブル更新の最初の部分を実行しています。 最初のテーブルのみを更新しており、別の (参照) テーブルの更新に利用されるカラムとオフセットを保存しています。
-
サーバーは複数テーブル更新の 2 番目の部分を実行しており、ほかのテーブルから一致した行を更新しています。
-
スレッドは
GET_LOCK()
呼び出しによってリクエストされたアドバイザリロックを、リクエストしようとしているか待機しています。SHOW PROFILE
の場合、この状態はスレッドがロックをリクエストしている (待機しているのではなく) ことを意味します。 -
スレッドは
SLEEP()
呼び出しを呼び出しました。 -
FLUSH TABLES WITH READ LOCK
はコミットロックを待機しています。 -
スレッドは、クエリー処理の他の部分に対するトランザクションのコミットを待機しています。
-
スレッドは、テーブルの基盤となる構造が変更され、その新しい構造を得るためにテーブルを再度オープンする必要があるという通知を受け取りました。 ただし、テーブルを再度オープンするには、ほかのすべてのスレッドが問題のテーブルをクローズするまで待機する必要があります。
この通知は、別のスレッドが
FLUSH TABLES
か、問題のテーブルに次のステートメントのいずれかを使用した場合に、この通知が行われます:FLUSH TABLES
、tbl_name
ALTER TABLE
、RENAME TABLE
、REPAIR TABLE
、ANALYZE TABLE
、またはOPTIMIZE TABLE
。 -
スレッドは
FLUSH TABLES
を実行しており、すべてのスレッドがテーブルを閉じるのを待機しているか、テーブルの基礎となる構造が変更されたため、新しい構造を取得するにはテーブルを再度開く必要があるという通知をスレッドが受け取りました。 ただし、テーブルを再度オープンするには、ほかのすべてのスレッドが問題のテーブルをクローズするまで待機する必要があります。この通知は、別のスレッドが
FLUSH TABLES
か、問題のテーブルに次のステートメントのいずれかを使用した場合に、この通知が行われます:FLUSH TABLES
、tbl_name
ALTER TABLE
、RENAME TABLE
、REPAIR TABLE
、ANALYZE TABLE
、またはOPTIMIZE TABLE
。 -
サーバーは、メタデータロックサブシステムからの
THR_LOCK
ロックまたはロックの取得を待機しています (lock_type
はロックのタイプを示します)。この状態は、
THR_LOCK
の待機を示します:Waiting for table level lock
次の状態は、メタデータロックの待機を示します:
Waiting for event metadata lock
Waiting for global read lock
Waiting for schema metadata lock
Waiting for stored function metadata lock
Waiting for stored procedure metadata lock
Waiting for table metadata lock
Waiting for trigger metadata lock
テーブルロックインジケータの詳細は、セクション8.11.1「内部ロック方法」 を参照してください。 メタデータのロックの詳細は、セクション8.11.4「メタデータのロック」 を参照してください。 ロック要求をブロックしているロックを確認するには、セクション27.12.13「パフォーマンススキーマロックテーブル」 で説明されているパフォーマンススキーマロックテーブルを使用します。
-
スレッドが条件が true になるのを待機している一般的な状態です。 特定の状態情報は使用できません。
-
サーバーはネットワークにパケットを書き込んでいます。