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