show processlist コマンドによる MySQL パフォーマンス検査の説明

show processlist コマンドによる MySQL パフォーマンス検査の説明

show processlist コマンドは非常に便利です。MySQL の実行が 50% 以上になることがよくありますが、このコマンドを使用して、どの SQL ステートメントがより多くのリソースを占有しているかを確認し、どの Web サイトにプログラム上の問題があるかを知る必要があります。

show processlist コマンドの出力には、実行中のスレッドが表示され、問題のあるクエリを特定するのに役立ちます。SUPER 権限を持っている場合は、すべてのスレッドを表示できます。そうでない場合は、自分が開始したスレッド (現在の MySQL アカウントで実行されているスレッド) のみを表示できます。

まず、各列の意味と目的について簡単に説明します。

最初の列の id はフラグであり、ステートメントを強制終了する場合に非常に便利です。

  • ユーザー列には現在のユーザーが表示されます。ルート ユーザーでない場合は、このコマンドは権限範囲内の SQL ステートメントのみを表示します。
  • ホスト列には、ステートメントが発行された IP とポートが表示されます。ハハハ、これを使えば問題のある発言をしたユーザーを追跡できるんですね。
  • db 列には、プロセスが現在接続されているデータベースが表示されます。
  • コマンド列には、現在の接続によって実行されたコマンドが表示されます。通常は sleep、query、または connect です。
  • 時間列は、この状態の継続時間(秒単位)です。
  • 状態列には、現在の接続を使用している SQL ステートメントのステータスが表示されます。これは非常に重要な列です。すべてのステータスについては後で説明します。状態はステートメントの実行における特定のステータスにすぎないことに注意してください。たとえば、SQL ステートメントは、完了する前に、tmp テーブルへのコピー、結果のソート、データの送信などの状態を経る必要がある場合があります。
  • 情報列には SQL 文が表示されます。長さに制限があるため、長い SQL 文は完全には表示されませんが、問題のある文を判断するための重要な基準となります。

このコマンドの最も重要な部分は状態列です。MySQL によってリストされる状態は主に次のとおりです。

Checking table

データ テーブルをチェックしています (これは自動です)。

Closing tables

テーブル内の変更されたデータはディスクにフラッシュされ、使用されていたテーブルは閉じられています。これは非常に迅速な操作ですが、そうでない場合は、ディスクがいっぱいになっていないか、ディスクに大きな負荷がかかっていないかを確認する必要があります。

Connect Out

レプリケーション スレーブ サーバーがマスター サーバーに接続しています。

Copying to tmp table on disk

一時結果セットが tmp_table_size より大きいため、メモリを節約するために一時テーブルがメモリ ストレージからディスク ストレージに変換されています。

Creating tmp table

部分的なクエリ結果を保持するための一時テーブルを作成します。

deleting from main table

サーバーは複数テーブルの削除の最初の部分を実行しており、最初のテーブルを削除しました。

deleting from reference tables

サーバーは複数テーブル削除の 2 番目の部分を実行しており、他のテーブルからレコードを削除しています。

Flushing tables

FLUSH TABLES が実行されており、他のスレッドがデータ テーブルを閉じるのを待機しています。

Killed

スレッドに kill 要求が送信された場合、スレッドは kill フラグをチェックし、次の kill 要求を破棄します。 MySQL は各メイン ループで kill フラグをチェックしますが、場合によってはスレッドが終了するまでに時間がかかることがあります。スレッドが他のスレッドによってロックされている場合、ロックが解除されると、kill 要求は直ちに有効になります。

Locked

別のクエリによってロックされています。

Sending data

選択クエリのレコードが処理され、結果がクライアントに送信されています。

Sorting for group

GROUP BY のソート。

Sorting for order

ORDER BY によるソート。

Opening tables

他の要因によって妨害されない限り、このプロセスは迅速に行われるはずです。たとえば、Alter TABLE または LOCK TABLE ステートメントが完了するまで、他のスレッドはデータ テーブルを開くことができません。テーブルを開こうとしています。

Removing duplicates

Select DISTINCT クエリが実行されていますが、MySQL は前の段階で重複レコードを最適化できませんでした。したがって、MySQL は重複レコードを再度削除し、その結果をクライアントに送信する必要があります。

Reopen table

テーブルのロックは取得されますが、ロックはテーブル構造が変更された後にのみ取得できます。ロックが解除され、テーブルが閉じられ、テーブルを再度開こうとしています。

Repair by sorting

インデックスを作成するためにソートされる命令を修正しました。

Repair with keycache

修復命令は、インデックス キャッシュを使用して新しいインデックスを 1 つずつ作成します。ソートによる修復よりも遅くなります。

Searching rows for update

条件を満たすレコードが更新対象として検索されています。更新が関連レコードを変更する前に、これを完了する必要があります。

Sleeping

新しいクライアントのリクエストを待っています。

System lock

外部システム ロックの取得を待機しています。同時に同じテーブルを要求する複数の mysqld サーバーを実行していない場合は、--skip-external-locking パラメータを追加して外部システム ロックを無効にすることができます。

Upgrading lock

Insert DELAYED は、新しいレコードを挿入するためにテーブル ロックを取得しようとしています。

Updating

一致するレコードを検索して変更します。

User Lock

GET_LOCK() を待機しています。

Waiting for tables

スレッドには、データ テーブル構造が変更され、新しい構造を取得するために再度開く必要があることが通知されます。その後、データ テーブルを再度開くには、他のすべてのスレッドがテーブルを閉じるまで待つ必要があります。この通知は、FLUSH TABLES tbl_name、ALTER TABLE、RENAME TABLE、REPAIR TABLE、ANALYZE TABLE、または OPTIMIZE TABLE の状況で生成されます。

waiting for handler insert

挿入 DELAYED は保留中の挿入操作をすべて処理し、新しい要求を待機しています。

ほとんどの状態は非常に高速な操作に対応しています。スレッドが数秒間同じ状態のままである場合は、問題が発生している可能性があるため、確認する必要があります。上記に記載されていないステータスもありますが、そのほとんどはサーバーにエラーがあるかどうかを確認する場合にのみ役立ちます。

共通カウンター

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • MySQL SHOW PROCESSLISTはトラブルシューティングの全プロセスを支援します
  • mysql show processlistはmysqlクエリプロセスを表示します。
  • mysql show processlist コマンドを使用して mysql ロックを確認する方法
  • Ubuntu での一般的な MySQL コマンドと中国語の文字化け
  • MySQL での show コマンドの使用に関する詳細な紹介
  • php.ini に extension=php_mysqli.dll ディレクティブを追加する手順
  • MySQL データベースの show processlist コマンドの使用の分析

<<:  React Nativeがシミュレータにリンクできない件について

>>:  Reactは動的ポップアップウィンドウコンポーネントを実装します

推薦する

CSSはフロートをシミュレートして、画像の左右を囲む中央テキストの効果を実現します。

画像の周囲にテキストを折り返すとは何ですか?これは次の図の効果です。 エフェクトのCSSコードはここ...

MySQL で期限切れのデータレコードを定期的に削除する簡単な方法

1. MySQL に接続してログインしたら、まず MySQL でイベント機能が有効になっているかどう...

iPhone デバイスの WAP ページでフォントサイズが大きい問題の解決策

JavaScriptコントロールを使用したくない場合は、次の方法を試してください。 Safariブラ...

すべてまたは逆の選択機能を実現するJavaScript

この記事では、全選択または選択を反転する機能を実現するためのJavaScriptの具体的なコードを参...

HTML に埋め込まれた Flash HTML ウェブページ コードに Flash ファイルを埋め込むソリューション (パート 1)

中国の習慣では、旧暦の1月15日より前に新年を祝います。ここで、庭にいる友人たちに新年の幸せを祈りた...

CSS のサイズと幅と高さのブラウザ解釈の違いに対する解決策

まずは例を見てみましょうコードをコピーコードは次のとおりです。 <!DOCTYPE html ...

MySQLデータベースのマスタースレーブ同期構成と読み取り書き込み分離

MySQL マスター スレーブ レプリケーションを使用する利点は次のとおりです。 1. 安定性を向上...

MySQL 最適化の概要 - クエリエントリの合計数

1. COUNT(*) と COUNT(COL) COUNT(*)は通常、主キーに対してインデックス...

HTML いくつかの特別な分割線効果

1. 基本ライン 2. 特殊効果(効果は独立しておらず、互いに組み合わせることができます) 1. 両...

Docker ポート マッピングと外部アクセス不可の問題

Docker コンテナはサービスを提供し、ポート 8888 をリッスンします。外部からアクセスできる...

高品質なコードを書く Web フロントエンド開発実践書の抜粋

(P4) Web 標準は一連の標準で構成されています。中心となる概念は、Web ページの構造、スタイ...

CSS でインラインブロック要素間のギャップを削除するいくつかの方法の詳細な説明

最近、モバイルページを制作する際には、レイアウトにインラインブロック要素がよく使われますが、インライ...

Navicat が MySQL にリモート接続するときに発生する 10060 不明エラーを解決する方法

はじめに:今日は、サーバー上のMySQLにリモート接続したいと思います。使用するソフトウェアはNav...

LINUX でプロセスを表示する 4 つの方法 (要約)

プロセスは CPU とメモリ内で実行されるプログラム コードであり、各プロセスは 1 つ以上のプロセ...