1. SHOW PROCESSLISTコマンド SHOW PROCESSLIST は実行中のスレッド (ユーザーが実行したスレッド) を表示します (または、SHOW FULL PROCESSLIST は詳細情報を表示します)。この情報は、INFORMATION_SCHEMA PROCESSLIST テーブルまたは mysqladmin processlist コマンドからも取得できます。 PROCESS 権限を持っている場合は、すべてのスレッドを表示できます。それ以外の場合は、自分のスレッド (つまり、使用している MySQL アカウントに関連付けられているスレッド) のみが表示されます。 FULL キーワードを使用しない場合、各ステートメントの最初の 100 文字が情報フィールドに表示されます。 プロセス情報は performance_schema.threads テーブルからも入手できます。ただし、スレッドへのアクセスにはミューテックス ロックは必要なく、サーバーのパフォーマンスへの影響は最小限です。 INFORMATION_SCHEMA.PROCESSLIST および SHOW PROCESSLIST は、ミューテックスが必要になるため、パフォーマンスに悪影響を及ぼします。 performance_schema.threads は、 INFORMATION_SCHEMA.PROCESSLIST および SHOW PROCESSLIST からは入手できないバックグラウンド スレッドに関する情報も表示します。つまり、 performance_schema.threads を使用して、アクティビティのスレッド情報の追加ソースを監視できます。 SHOW PROCESSLIST ステートメントは、「接続が多すぎます」というエラー メッセージが表示され、何が起こっているのか理解したい場合に役立ちます。 MySQL は、管理者が常にシステムに接続して検査できるように、SUPER 権限を持つアカウント用に 1 つの追加接続を予約します (この権限をすべてのユーザーに付与していないと仮定)。 スレッドは KILL ステートメントを使用して終了できます。 以下は SHOW PROCESSLIST の出力例です。 mysql> 完全なプロセスリストを表示\G ************************** 1. 行 **************************** 識別子: 123 ユーザー: root ホスト: ローカルホスト db: パフォーマンススキーマ コマンド: クエリ 時間: 0 状態: 開始 情報: 完全なプロセスリストを表示 セット内の 1 行 (0.00 秒) SHOW PROCESSLIST によって生成される列の意味は次のとおりです。 識別子 接続識別子。これは、INFORMATION_SCHEMA.PROCESSLIST テーブルの ID 列、パフォーマンス ビューのスレッド テーブルの PROCESSLIST_ID 列、および CONNECTION_ID() 関数によって返される値に表示される値と同じタイプです。 ユーザー ステートメントを発行する MySQL ユーザー。システム ユーザーの場合は、タスクを内部的に処理するためにサーバーによって生成された非クライアント スレッドを参照します。これは、レプリケーション スレーブまたは遅延行ハンドラーによって使用される I/O または SQL スレッドである可能性があります。認証されていないユーザーとは、クライアント接続に関連付けられているが、クライアント ユーザーの認証がまだ完了していないスレッドです。 event_scheduler は、スケジュールされたイベントを監視するスレッドを指します。システム ユーザーの場合は、ホスト列にホストは指定されません。 ホスト ステートメントを発行したクライアントのホスト名 (ホスト名のないシステム ユーザーを除く)。どのクライアントが何を実行しているかを簡単に判別できるように、host_name:client_port として表示されます。 デシベル 現在実行中のステートメントのデフォルトのデータベース(選択されている場合)。それ以外の場合は NULL。 指示 このスレッドが現在実行しているコマンドを表示します。これは通常、DDL または DML ステートメントに対応します。 時間 スレッドが現在の状態にある時間を示します。スレッドの現在の時間の概念は、場合によっては変わることがあります。つまり、スレッドは時間を変更することができます。マスターからのイベントを処理しているスレーブ上で実行されているスレッドの場合、スレッド時間はイベントで見つかった時間に設定されるので、スレーブではなくマスターの現在の時間が反映されます。 SET TIMESTAMP = 値。 州 コマンド命令に対応して、ほとんどの状態は非常に高速な操作に対応します。スレッドが特定の状態に数秒間留まる場合は、調査が必要な問題が発生している可能性があります。 情報 スレッドによって実行されたステートメントのテキストが含まれます。実行されていない場合は NULL になります。デフォルトでは、この値にはステートメントの最初の 100 文字のみが含まれます。完全なステートメントを表示するには、SHOW FULL PROCESSLIST を使用します。 2. スレッドコマンド値 スレッドには、次のいずれかのコマンド値を設定できます。 バイナリログ ダンプ:これは、バイナリ ログの内容をスレーブ サーバーに送信するために使用されるマスター サーバー上のスレッドです。 テーブル ダンプ:スレッドはテーブルの内容をスレーブ サーバーに送信します。 ユーザーの変更:スレッドはユーザー変更操作を実行しています。 ステートメントを閉じる:スレッドは準備されたステートメントを閉じています。 接続:レプリケーション中に、スレーブ サーバーはマスター サーバーに接続します。 接続アウト:レプリケーションでは、スレーブ サーバーがマスター サーバーに接続しています。 DB の作成:スレッドはデータベース作成操作を実行しています。 デーモン:このスレッドはサーバーの内部のものであり、クライアント接続を処理するスレッドではありません。 デバッグ:スレッドはデバッグ情報を生成しています。 遅延挿入:スレッドは遅延挿入ハンドラーです。 Drop DB:スレッドはデータベース削除操作を実行しています。 実行:スレッドは準備されたステートメントを実行しています (準備されたステートメント タイプはプリコンパイルされたステートメントであり、JDBC はこのタイプの SQL 実行をサポートしています)。 フェッチ:スレッドは準備されたステートメントの結果を実行しています。 フィールド リスト:スレッドはテーブル列に関する情報を取得しています。 Init DB:スレッドはデフォルトのデータベースを選択しています。 強制終了:スレッドが別のスレッドを強制終了しています。 長いデータ:このスレッドは、準備されたステートメントを実行した結果として長いデータを取得します。 Ping:スレッドはサーバーの ping 要求を処理しています。 準備:スレッドはステートメントの実行プランを生成しています。 Processlist:スレッドはサーバー スレッドに関する情報を生成しています。 クエリ:スレッドはステートメントを実行しています。 終了:スレッドは終了します。 更新:スレッドはテーブル、ログ、またはキャッシュを更新しているか、ステータス変数をリセットしているか、サーバー情報を複製しています。 スレーブの登録:スレッドはスレーブ サーバーを登録しています。 ステートメントをリセット:スレッドは準備されたステートメントをリセットしています。 オプションの設定:スレッドはクライアント ステートメント実行オプションを設定またはリセットしています。 シャットダウン:スレッドはサーバーをシャットダウンしています。 スリープ:スレッドはクライアントが新しいステートメントを送信するのを待機しています。 統計:スレッドはサーバーのステータス情報を生成しています。 時間:未使用。 3. スレッド状態値
次のリストは、レプリケーションなどのより複雑なアクティビティではなく、一般的なクエリ処理に関連付けられた状態スレッド値について説明します。これらの多くは、サーバーのバグを見つけるためにのみ使用されます。 作成後: スレッドがテーブル (内部一時テーブルを含む) を作成すると、テーブルを作成する関数の最後にテーブルが作成されます。何らかのエラーによりテーブルを作成できない場合でも、このステータスが使用されます。 分析中: スレッドは MyISAM テーブルのキー分布を計算しています (例: ANALYZE TABLE の場合)。 権限の確認: スレッドは、ステートメントを実行するために必要な権限がサーバーにあるかどうかを確認しています。 テーブルのチェック: スレッドはテーブル チェック操作を実行しています。 クリーンアップ中: スレッドはコマンドを処理し、メモリを解放していくつかの状態変数をリセットする準備をしています。 テーブルを閉じる: スレッドは変更されたテーブル データをディスクにフラッシュし、使用されたテーブルを閉じます。これはすぐに完了するはずです。そうでない場合は、ディスクがいっぱいになっていないこと、またディスクの使用頻度が極端に高くないことを確認してください。 tmp テーブルにコピー: スレッドは ALTER TABLE ステートメントを処理しています。この状態は、新しい構造のテーブルが作成された後で、行がテーブルにコピーされる前に発生します。この状態のスレッドでは、パフォーマンス スキーマを使用して、コピー操作の進行状況に関する情報を取得できます。 グループ テーブルへのコピー: ステートメントに異なる ORDER BY および GROUP BY 基準がある場合、行はグループにまとめられ、一時テーブルにコピーされます。 インデックスを作成しています: スレッドは MyISAM テーブルの ALTER TABLE ... ENABLE KEYS を処理しています。 ソート インデックスを作成しています: スレッドは内部の一時テーブルを使用して解析された SELECT を処理しています。 テーブルの作成: スレッドはテーブルを作成しています。これには一時テーブルの作成も含まれます。 ストレージ エンジンに ALTER TABLE をコミットしています: サーバーは ALTER TABLE を完了し、結果をコミットしました。 メイン テーブルからの削除: サーバーは、複数テーブルの削除の最初の部分を実行しています。最初のテーブルからのみ削除し、他の (参照) テーブルからの削除に使用する列とオフセットを保存します。 参照テーブルからの削除: サーバーは複数テーブルの削除の 2 番目の部分を実行し、他のテーブルから一致する行を削除しています。 discard_or_import_tablespace: スレッドは ALTER TABLE ... DISCARD TABLESPACE または ALTER TABLE ... IMPORT TABLESPACE ステートメントを処理しています。 end: これは、ALTER TABLE、CREATE VIEW、DELETE、INSERT、SELECT、または UPDATE ステートメントの終了時、ただしクリーンアップの前に発生します。 実行中: スレッドがステートメントの実行を開始しました。 init_command の実行: スレッドは init_command システム変数の値内のステートメントを実行しています。 アイテムの解放: スレッドがコマンドを実行しました。この状態で実行されるアイテムの解放の一部には、キャッシュのクエリが含まれます。通常、この状態の後にはクリーンアップが続きます。 FULLTEXT 初期化: サーバーは自然言語の全文検索を実行する準備をしています。 init: この操作は、ALTER TABLE、DELETE、INSERT、SELECT、または UPDATE を初期化する前に実行されます。この状態でサーバーが実行するアクションには、バイナリ ログ、Innodb ログのフラッシュ、および一部のクエリ キャッシュのクリーンアップ操作が含まれます。最終状態では、テーブル内のデータの変更後にクエリ キャッシュ エントリが削除され、イベントがバイナリ ログに書き込まれ、BLOB を含むメモリ バッファーが解放されるなどのアクションが発生する可能性があります。 強制終了: KILL ステートメントが実行され、次に kill フラグがチェックされるときにスレッドを中断する必要があることを示すステートメントがスレッドに送信されます。このフラグは MySQL のすべてのメイン ループでチェックされますが、場合によってはスレッドが終了するまでに少し時間がかかることがあります。スレッドが他のスレッドによってロックされている場合、他のスレッドがロックを解除するとすぐに kill が有効になります。 システム テーブルのロック: スレッドはシステム テーブル (タイム ゾーン テーブルやログ テーブルなど) をロックしようとしています。 login: クライアントが正常に認証されるまでの接続スレッドの初期状態。 キーの管理: サーバーはテーブル インデックスを有効または無効にします。 NULL: このステータスは SHOW PROCESSLIST ステータスに使用されます。 システム テーブルを開く: スレッドはシステム テーブル (タイム ゾーン テーブルやログ テーブルなど) を開こうとしました。 テーブルを開く: スレッドはテーブルを開こうとしています。何かがテーブルを開くのを妨げていない限り、これは非常に高速な手順になるはずです。たとえば、ALTER TABLE または LOCK TABLE ステートメントは、ステートメントが完了するまでテーブルが開かれないようにすることができます。また、table_open_cache パラメータの値が十分に大きいかどうかにも注意する必要があります。システム テーブルの場合は、システム テーブルを開く状態を使用します。 最適化中: サーバーはクエリの初期最適化を実行しています。 準備中: この状態はクエリの最適化中に発生します。 古いリレー ログを消去しています: スレッドは不要なリレー ログ ファイルを削除しています。 クエリ終了: この状態は、クエリの処理後、アイテムの解放状態の前に発生します。 重複の削除: このクエリで SELECT DISTINCT を使用すると、MySQL が早い段階で個別の操作を最適化できなくなります。したがって、MySQL では、結果をクライアントに送信する前に、重複する行をすべて削除するための追加の段階が必要になります。 一時テーブルの削除: スレッドは SELECT ステートメントの処理後に内部の一時テーブルを削除しています。一時テーブルが作成されていない場合、このステータスは使用されません。 名前変更: スレッドはテーブルの名前を変更しています。 結果テーブルの名前変更: スレッドは ALTER TABLE ステートメントを処理し、新しいテーブルを作成し、その名前を変更して元のテーブルを置き換えました。 テーブルを再度開く: スレッドはテーブルのロックを取得しましたが、ロックを取得した後に、基礎となるテーブル構造が変更されたことに気付きました。ロックを解除し、テーブルを閉じて、再度開こうとします。 ソートによる修復: 修復コードはソートを使用してインデックスを作成します。 ALTER TABLE を準備中: サーバーは ALTER TABLE をその場で実行する準備をしています。 修復完了: スレッドは MyISAM テーブルのマルチスレッド修復を完了しました。 キーキャッシュによる修復: 修復コードはキー キャッシュを 1 つずつ使用してキーを作成しますが、これはソートによる修復よりもはるかに遅くなります。 ロールバック中: スレッドはトランザクションをロールバックしています。 状態の保存: MyISAM テーブル操作 (修復や分析など) の場合、スレッドは新しいテーブル状態を .MYI ファイル ヘッダーに保存します。ステータスには、行数、AUTO_INCREMENT カウンター、キー分布などの情報が含まれます。 更新する行を検索しています: スレッドは更新する前に、一致するすべての行を検索する最初のフェーズを実行しています。これは、UPDATE が、関連する行を見つけるために使用されるインデックスを変更する場合に必要です。 セットアップ: スレッドは ALTER TABLE 操作を開始しています。 グループのソート: スレッドは GROUP BY を満たすクエリを実行しています。 順序のソート: スレッドは ORDER BY を満たすクエリを実行しています。 インデックスのソート: スレッドは、MyISAM テーブルの最適化操作中により効率的なアクセスを実現するためにインデックス ページをソートしています。 結果のソート: SELECT ステートメントの場合、これはソート インデックスの作成と似ていますが、非一時テーブル用です。 統計: サーバーはクエリ実行プランを作成するために統計を計算しています。スレッドが長時間この状態にある場合、サーバーはディスクバインドされており、他の作業を実行している可能性があります。 更新: スレッドはテーブルの更新を開始する準備をしています。 更新中: スレッドは更新する行を検索し、更新しています。 メイン テーブルの更新: サーバーは複数テーブルの更新の最初の部分を実行しています。最初のテーブルのみを更新し、他の (参照される) テーブルの更新に使用される列とオフセットを保存します。 参照テーブルの更新: サーバーは複数テーブルの更新の 2 番目の部分を実行し、他のテーブルから一致する行を更新しています。 ユーザー ロック: スレッドは、GET_LOCK() 呼び出しを介して要求されたアドバイザリ ロックを要求しようとしているか、または待機しています。 SHOW PROFILE のため、この状態はスレッドがロックを要求している (ロックを待機しているわけではない) ことを意味します。 ユーザースリープ: スレッドは SLEEP() 呼び出しを呼び出します。
スロークエリのログ記録: スレッドはスロークエリ ログにステートメントを書き込んでいます。 テーブルの変更: サーバーはインプレース ALTER TABLE を実行しています。 クライアントからの受信: サーバーはクライアントからパケットを読み取っています。 tmp テーブルにコピーしています: サーバーは一時テーブルをディスクからメモリにコピーしています。これは、メモリからディスクに転送されるのではなく、ディスク上に直接作成される一時テーブルです。 ディスク上の tmp テーブルにコピーしています: メモリを節約するために、スレッドが一時テーブルをメモリからディスクベースのストレージに変更した後、ディスクからメモリにコピーしている状態。 一時テーブルを作成しています: スレッドはメモリまたはディスク上に一時テーブルを作成しています。テーブルがメモリ内に作成され、後でディスク テーブルに変換された場合、操作のステータスはディスク上の tmp テーブルにコピー中になります。 データの送信: スレッドは SELECT ステートメントから行を読み取って処理し、クライアントにデータを送信しています。この状態で発生する操作は大量のディスク アクセス (読み取り) を実行する傾向があるため、通常、特定のクエリの存続期間全体の中で最も長く実行される状態になります。 クライアントに送信中: サーバーはデータ パケットをクライアントに書き込んでいます。 コミット ロックを待機しています: FLUSH TABLES WITH READ LOCK はコミット ロックを待機しています。 グローバル読み取りロックを待機しています: FLUSH TABLES WITH READ LOCK がグローバル読み取りロックを待機しているか、read_only グローバル システム変数が設定されています。 テーブルを待機中: スレッドは、テーブルの基礎となる構造が変更され、新しい構造を取得するためにテーブルを再度開く必要があるという通知を受け取ります。ただし、テーブルを再度開くには、他のすべてのスレッドがテーブルを閉じるまで待つ必要があります。別のスレッドが 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。 lock_type ロックを待機しています: サーバーは、THR_LOCK ロックまたはメタデータ ロック サブシステムからのロックの取得を待機しています。lock_type はロックのタイプを示します。 THR_LOCK 状態は、テーブル レベルのロック待ちを意味します。これらの状態は、メタデータ ロック待ちを示します: イベント メタデータ ロック待ち、グローバル読み取りロック待ち、スキーマ メタデータ ロック待ち、ストアド関数メタデータ ロック待ち、ストアド プロシージャ メタデータ ロック待ち、テーブル メタデータ ロック待ち、トリガー メタデータ ロック待ち。 ネットへの書き込み: サーバーはデータ パケットをネットワークに書き込んでいます。スレッドが長時間実行され、常にネットへの書き込み状態にある場合、データ パケットが常にネットワークに送信されています。max_allowed_packet サイズを調整してみてください。さらに、これにより他のスレッドが大幅にブロックされる可能性があります。 条件を待機中: スレッドが条件が真になるのを待機している一般的な状態です。特定の状態情報は利用できません。 システム ロック: スレッドは mysql_lock_tables() を呼び出しましたが、スレッドの状態は更新されていません。これは非常に一般的な症状であり、さまざまな理由で発生する可能性があります。たとえば、スレッドはテーブルに対する内部または外部のシステム ロックを要求したり、待機したりします。これは、InnoDB が LOCK TABLES の実行中にテーブル レベルのロック待ちをしているときに発生する可能性があります。この状態が外部ロックの要求によって発生し、同じ MyISAM テーブルにアクセスする複数の mysqld サーバーを使用していない場合、--skip-external-locking オプションを使用して外部システム ロックを無効にすることができます。ただし、外部ロックはデフォルトで無効になっているため、このオプションが機能しない可能性が高くなります。 SHOW PROFILE のため、この状態はスレッドがロックを要求している (ロックを待機しているわけではない) ことを意味します。システム テーブルの場合は、システム テーブルのロック状態を使用します。
キャッシュされたクエリの権限を確認しています: サーバーは、ユーザーがキャッシュされたクエリ結果にアクセスする権限を持っているかどうかを確認しています。 クエリのクエリ キャッシュを確認しています: サーバーは、現在のクエリがクエリ キャッシュに存在するかどうかを確認しています。 クエリ キャッシュ エントリの無効化: 基になるテーブルが変更されたため、クエリ キャッシュ エントリは無効としてマークされます。 キャッシュされた結果をクライアントに送信: サーバーはクエリ キャッシュからクエリの結果を取得し、クライアントに送信します。 クエリ キャッシュに結果を保存する: サーバーはクエリ結果をクエリ キャッシュに保存します。 クエリ キャッシュ ロックの待機中: この状態は、セッションがクエリ キャッシュ ロックの取得を待機しているときに発生します。この状況では、クエリ キャッシュを無効にする INSERT または DELETE ステートメント、RESET QUERY CACHE など、いくつかのクエリ キャッシュ操作を実行する必要がある場合があります。
これらの状態は、イベント ディスパッチャ スレッド、ディスパッチされたイベントを実行するために作成されたスレッド、またはディスパッチャを終了するスレッドに適用されます。 クリアリング スケジューラ スレッドまたはイベントを実行しているスレッドが終了しており、まもなく終了します。 初期化されました スケジューラ スレッド、つまりイベントを実行するスレッドが初期化されます。 次のアクティベーションを待機中 スケジューラには空でないイベント キューがありますが、次のアクティベーションは将来行われます。 スケジューラの停止を待機中 スレッドは SET GLOBAL event_scheduler=OFF を発行し、スケジューラが停止するのを待機しています。 空のキューを待機中 スケジューラのイベント キューは空で、スリープ状態です。
上記のカテゴリに加えて、レプリケーションマスタースレッドの状態(State)値、レプリケーションスレーブIOスレッドの状態(State)値、レプリケーションスレーブSQLスレッド(State)値、レプリケーションスレーブ接続スレッド(State)値もあり、詳細はMySQLマスタースレーブレプリケーションスレッドの状態遷移で確認できます。 要約する 上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM を応援していただきありがとうございます。 以下もご興味があるかもしれません:
|
<<: Windows サーバー ポートを開きます (例としてポート 8080 を使用します)
>>: Vue3+Vantコンポーネントを使用してアプリの検索履歴機能を実装する(サンプルコード)
目次1. はじめに2. 本文2.1 フィールドの連結2.2 フィールドでの算術計算の実行1. はじめ...
IE、Firefox、Chrome ブラウザでの表示効果は、...
この記事では、カルーセルマップの効果を実現するためのBootstrapの具体的なコードを参考までに共...
目次0x01 ドライバーモジュールのロードに失敗しました0x02 ソリューション要約する0x01 ド...
以下は、B+ ツリーのデータ構造と実験結果からの推測に基づいた私の判断です。間違いがあればご指摘くだ...
この記事では、例を使用して MySQL 変数の使用方法を説明します。ご参考までに、詳細は以下の通りで...
目次1.setInterval() 2.タイムアウトを設定する() 1.setInterval()指...
will-change は、要素にどのような変更が行われるかをブラウザに伝え、ブラウザが事前に最適化...
初心者は自分で録音しましょう1. スーパーバイザーをインストールします。 Supervisor は ...
mysql-5.7.19-winx64インストールフリー版の設定方法、参考までに具体的な内容は以下の...
1. MySQLデータベースを作成する1. データベース構文を作成する --「testdb」という名...
序文ファイル システムは、データの保存方法と復元方法を整理する役割を担います。 いずれにせよ、時間の...
最近、Linux を使用してローカルにログインしていたところ、正常にログインできず、次のエラー メッ...
Docker が今日非常に人気がある理由は、主にその軽量性、迅速な展開、およびリソースの利用にありま...
導入dockerコンテナとdocker-composeに基づいて、Linux環境でのdockerの基...