MySQL 8.0 リファレンスマニュアル MySQL NDB Cluster 8.0 を含む
このページは機械翻訳したものです。
次のリストは、レプリケーションなどの特殊なアクティビティーではなく、一般的なクエリーの処理に関連付けられた、スレッドの 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_nameALTER TABLE、RENAME TABLE、REPAIR TABLE、ANALYZE TABLE、または OPTIMIZE TABLE。
スレッドは FLUSH TABLES を実行しており、すべてのスレッドがテーブルを閉じるのを待機しているか、テーブルの基礎となる構造が変更されたため、新しい構造を取得するにはテーブルを再度開く必要があるという通知をスレッドが受け取りました。 ただし、テーブルを再度オープンするには、ほかのすべてのスレッドが問題のテーブルをクローズするまで待機する必要があります。
この通知は、別のスレッドが FLUSH TABLES か、問題のテーブルに次のステートメントのいずれかを使用した場合に、この通知が行われます: FLUSH TABLES 、tbl_nameALTER 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 になるのを待機している一般的な状態です。 特定の状態情報は使用できません。
サーバーはネットワークにパケットを書き込んでいます。