Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.2Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


8.12.5.2 一般的なスレッドの状態

次のリストは、レプリケーションなどの特殊なアクティビティーではなく、一般的なクエリーの処理に関連付けられた、スレッドの State 値を説明しています。これらの多くは、サーバーのバグを見つけるためにのみ役立ちます。

  • After create

    これは、スレッドがテーブル (内部一時テーブルも含む) を作成する際の、テーブルを作成する関数の最後に発生します。何らかのエラーのためテーブルを作成できなかった場合でも、この状態が使われます。

  • altering table

    サーバーはインプレース ALTER TABLE の実行中です。

  • Analyzing

    スレッドは MyISAM テーブルのキー分布を計算しています (ANALYZE TABLE などで)。

  • checking permissions

    スレッドは、サーバーがステートメントを実行するために必要な権限を持っているかどうかを確認しています。

  • Checking table

    スレッドはテーブルチェック操作を実行しています。

  • cleaning up

    スレッドは 1 つのコマンドを処理し、メモリーの解放と特定の状態変数のリセットを準備しています。

  • closing tables

    スレッドは、変更されたテーブルデータをディスクにフラッシュし、使用されたテーブルをクローズしています。これは高速の操作であるはずです。そうでない場合は、ディスクがいっぱいでないか、ディスクが著しく頻繁に使用されていないかを確認してください。

  • committing alter table to storage engine

    サーバーはインプレース ALTER TABLE を終了し、結果をコミットしています。

  • converting HEAP to MyISAM

    スレッドは内部一時テーブルを MEMORY テーブルからディスク上の MyISAM テーブルに変換しています。

  • copy to tmp table

    スレッドは ALTER TABLE ステートメントを処理しています。この状態は、新しい構造でテーブルが作成されたあと、ただし、それに行がコピーされる前に発生します。

  • Copying to group table

    ステートメントの ORDER BYGROUP BY の基準が異なる場合、行はグループによってソートされ、一時テーブルにコピーされます。

  • Copying to tmp table

    サーバーはメモリー内の一時テーブルにコピーしています。

  • Copying to tmp table on disk

    サーバーはディスク上の一時テーブルにコピーしています。一時結果セットが大きくなりすぎました (セクション8.4.4「MySQL が内部一時テーブルを使用する仕組み」を参照してください)。その結果、スレッドは一時テーブルをインメモリーからディスクベースのフォーマットに変更して、メモリーを節約します。

  • Creating index

    スレッドは MyISAM テーブルに対する ALTER TABLE ... ENABLE KEYS を処理しています。

  • Creating sort index

    スレッドは内部一時テーブルを使用して解決される SELECT を処理しています。

  • creating table

    スレッドはテーブルを作成しています。これには一時テーブルの作成が含まれます。

  • Creating tmp table

    スレッドはメモリー内またはディスク上に一時テーブルを作成しています。メモリー内に作成されたテーブルがあとでディスク上のテーブルに変換される場合、その操作中の状態は Copying to tmp table on disk になります。

  • deleting from main table

    サーバーは複数テーブル削除の最初の部分を実行しています。最初のテーブルからのみ削除し、別の (参照) テーブルからの削除に使用されるカラムとオフセットを保存しています。

  • deleting from reference tables

    サーバーは複数テーブル削除の 2 番目の部分を実行しており、別のテーブルから一致した行を削除しています。

  • discard_or_import_tablespace

    スレッドは ALTER TABLE ... DISCARD TABLESPACE または ALTER TABLE ... IMPORT TABLESPACE ステートメントを処理しています。

  • end

    これは、ALTER TABLECREATE VIEWDELETEINSERTSELECT、または UPDATE ステートメントの最後、ただしクリーンアップの前に発生します。

  • executing

    スレッドはステートメントの実行を開始しました。

  • Execution of init_command

    スレッドは init_command システム変数の値のステートメントを実行しています。

  • freeing items

    スレッドはコマンドを実行しました。この状態中に実行される項目の解放の一部には、クエリーキャッシュが含まれます。通常、この状態のあとは cleaning up になります。

  • Flushing tables

    スレッドは FLUSH TABLES を実行しており、すべてのスレッドがそれぞれのテーブルをクローズするのを待っています。

  • FULLTEXT initialization

    サーバーは自然言語全文検索を実行する準備をしています。

  • init

    これは、ALTER TABLEDELETEINSERTSELECT、または UPDATE ステートメントの初期化の前に発生します。この状態のサーバーによってとられるアクションには、バイナリログ、InnoDB ログ、および一部のクエリーキャッシュクリーンアップ操作のフラッシュが含まれます。

    end 状態では、次の操作が行われることがあります。

    • テーブルのデータが変更されたあとのクエリーキャッシュエントリの削除

    • バイナリログへのイベントの書き込み

    • BLOB 用を含むメモリーバッファーの解放

  • Killed

    だれかがスレッドに KILL ステートメントを送っており、スレッドは次に強制終了フラグをチェックしたときに中止するはずです。フラグは MySQL の各主要ループ内でチェックされますが、場合によってはスレッドが停止するまでに少し時間がかかる場合があります。スレッドがほかのスレッドにロックされている場合、強制終了はほかのスレッドがそのロックを解除するとすぐに有効になります。

  • logging slow query

    スレッドはステートメントを低速クエリーログに書き込んでいます。

  • NULL

    この状態は SHOW PROCESSLIST 状態に使用されます。

  • login

    クライアントが正常に認証されるまでの接続スレッドの初期状態です。

  • manage keys

    サーバーはテーブルインデックスを有効または無効にしています。

  • Opening tablesOpening table

    スレッドはテーブルをオープンしようと試みています。これは、何かにオープンを妨げられないかぎり、きわめて高速な手順であるはずです。たとえば、ALTER TABLE または LOCK TABLE ステートメントは、そのステートメントが終了するまでテーブルのオープンを妨げることがあります。table_open_cache 値が十分に大きいことをチェックすることも価値があります。

  • optimizing

    サーバーはクエリーの初期最適化を実行しています。

  • preparing

    この状態はクエリーの最適化中に発生します。

  • preparing for alter table

    サーバーはインプレース ALTER TABLE の実行を準備しています。

  • Purging old relay logs

    スレッドは不要なリレーログファイルを削除しています。

  • query end

    この状態は、クエリーを処理したあと、ただし freeing items 状態の前に発生します。

  • Reading from net

    サーバーはネットワークからパケットを読み取っています。

  • Removing duplicates

    クエリーは、MySQL が早い段階で個別の操作を最適化できなくなるような方法で SELECT DISTINCT を使用していました。このため、MySQL は結果をクライアントに送る前にすべての重複した行を削除するための追加の段階を必要とします。

  • removing tmp table

    スレッドは SELECT ステートメントを処理したあとに内部一時テーブルを削除しています。一時テーブルが作成されなかった場合、この状態は使用されません。

  • rename

    スレッドはテーブルの名前を変更しています。

  • rename result table

    スレッドは ALTER TABLE ステートメントを処理しており、新しいテーブルを作成し、元のテーブルを置き換えるためにその名前を変更しています。

  • Reopen tables

    スレッドはテーブルのロックを取得しましたが、ロックの取得後、基盤となるテーブル構造が変更されたことを認識しました。それはロックを解除し、テーブルをクローズして、再度オープンしようとしています。

  • Repair by sorting

    修復コードはインデックスを作成するためにソートを使用しています。

  • Repair done

    スレッドは MyISAM テーブルに対するマルチスレッドの修復を完了しました。

  • Repair with keycache

    修復コードはキーキャッシュ経由で、1 つずつキーの作成を使用しています。これは Repair by sorting よりはるかに遅くなります。

  • Rolling back

    スレッドはトランザクションをロールバックしています。

  • Saving state

    MyISAM テーブルの修復や分析などの操作で、スレッドは新しいテーブルの状態を .MYI ファイルヘッダーに保存しています。状態には、行の数、AUTO_INCREMENT カウンタ、キー分布などの情報が含まれています。

  • Searching rows for update

    スレッドは、すべての一致する行を更新する前に、それらを見つけるための第 1 フェーズを実行しています。これは、UPDATE が、関連する行を見つけるために使用されるインデックスを変更している場合に、実行される必要があります。

  • Sending data

    スレッドは SELECT ステートメントの行を読み取り、処理して、データをクライアントに送信しています。この状態で行われる操作は、大量のディスクアクセス (読み取り) を実行する傾向があるため、特定のクエリーの存続期間にわたる最長時間実行状態になることがあります。

  • setup

    スレッドは ALTER TABLE 操作を開始しています。

  • Sorting for group

    スレッドは GROUP BY を満たすためにソートを実行しています。

  • Sorting for order

    スレッドは ORDER BY を満たすためにソートを実行しています。

  • Sorting index

    スレッドは MyISAM テーブルの最適化操作中に、より効率的なアクセスのためにインデックスページをソートしています。

  • Sorting result

    SELECT ステートメントの場合、これは Creating sort index と似ていますが、非一時テーブルに対するものです。

  • statistics

    サーバーはクエリー実行プランを開発するための統計を計算しています。スレッドが長期間この状態にある場合、サーバーはディスクに依存してほかの作業を実行している可能性があります。

  • System lock

    スレッドは、テーブルの内部または外部システムロックをリクエストしようとしているか待機しています。この状態が外部ロックへのリクエストによって発生しており、同じ MyISAM テーブルにアクセスしている複数の mysqld サーバーを使用していない場合、--skip-external-locking オプションによって外部システムロックを無効にできます。ただし、外部ロックはデフォルトで無効になるため、このオプションには効果がない可能性があります。SHOW PROFILE の場合、この状態はスレッドがロックをリクエストしている (待機しているのではなく) ことを意味します。

  • update

    スレッドはテーブルの更新を開始する準備ができています。

  • Updating

    スレッドは更新する行を探していて、それらを更新しています。

  • updating main table

    サーバーは複数テーブル更新の最初の部分を実行しています。最初のテーブルのみを更新しており、別の (参照) テーブルの更新に利用されるカラムとオフセットを保存しています。

  • updating reference tables

    サーバーは複数テーブル更新の 2 番目の部分を実行しており、ほかのテーブルから一致した行を更新しています。

  • User lock

    スレッドは GET_LOCK() 呼び出しによってリクエストされたアドバイザリロックを、リクエストしようとしているか待機しています。SHOW PROFILE の場合、この状態はスレッドがロックをリクエストしている (待機しているのではなく) ことを意味します。

  • User sleep

    スレッドは SLEEP() 呼び出しを呼び出しました。

  • Waiting for commit lock

    FLUSH TABLES WITH READ LOCK はコミットロックを待機しています。

  • Waiting for global read lock

    FLUSH TABLES WITH READ LOCK はグローバル読み取りロックまたはグローバル read_only システム変数が設定されるのを待機しています。

  • Waiting for tables, Waiting for table flush

    スレッドは、テーブルの基盤となる構造が変更され、その新しい構造を得るためにテーブルを再度オープンする必要があるという通知を受け取りました。ただし、テーブルを再度オープンするには、ほかのすべてのスレッドが問題のテーブルをクローズするまで待機する必要があります。

    この通知は、別のスレッドが FLUSH TABLES か、問題のテーブルに次のステートメントのいずれかを使用した場合に、この通知が行われます: FLUSH TABLES tbl_nameALTER TABLERENAME TABLEREPAIR TABLEANALYZE TABLE、または OPTIMIZE TABLE

  • Waiting for lock_type lock

    サーバーはロックの獲得を待機しています。ここで 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

  • Waiting on cond

    スレッドが条件が true になるのを待機している一般的な状態です。特定の状態情報は使用できません。

  • Writing to net

    サーバーはネットワークにパケットを書き込んでいます。


User Comments
  Posted by Jørgen Austvik on August 22, 2008
"Waiting for table" can also happen on TRUNCATE TABLE
Sign Up Login You must be logged in to post a comment.