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は動的ポップアップウィンドウコンポーネントを実装します

推薦する

MySQLを5.7にアップグレードすると、WordPressはデータをインポートするときにエラー1067を報告します

最近MySQLを5.7にアップグレードしましたが、WordPressでデータのインポート時にエラーが...

HTML+CSS+jQuery はスクリーンショットで検索ホットリストタブ効果を模倣します

コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBLIC "...

MacにMySQLデータベースをインストールする方法を教えます

Mac 用 MySQL をダウンロード: https://downloads.mysql.com/a...

HTML のフォームフォームのメソッド属性の紹介

1 メソッドは、データをサーバーに送信する方法を指定するプロパティです。 2 post と get ...

Ubuntu 18.04 Server バージョンのインストールと使用方法 (画像とテキスト)

1 システムのインストール手順OSバージョン:1804イメージのダウンロード: http://cd...

Linux での crontab スケジュール実行コマンドの詳細な説明

LINUX では、定期的なタスクは通常、cron デーモン プロセス [ps -ef | grep ...

MySQL アップグレードのベストプラクティス

MySQL 5.7 には、オンライン DDL、マルチソース レプリケーション、拡張された半同期、テー...

IDEA 構成の Tomcat 起動エラーの問題を解決する

異なるサーブレット パスを構成するときに、次の 2 つのエラーが発生しました。 java.lang....

XHTML の一般的な構造タグ

構造本文、見出し、HTML、タイトル文章abbr、頭字語、アドレス、引用ブロック、br、引用、コード...

HTML での select optgroup タグの使用の概要

時々、選択した内容をグループ化する必要があります。以前はプログラム制御を使用していました。今日、se...

TypeScript の関数

目次1. 関数の定義1.1 JavaScript の関数1.2 TypeScriptの関数2. オプ...

MySQL でストアド プロシージャを作成し、ループでレコードを追加する方法

この記事では、例を使用して、MySQL でストアド プロシージャを作成し、ループでレコードを追加する...

Nginx と Lua を使用した JWT 検証の概要

目次序文Lua スクリプトnignx.conf の設定Dockerfileの設定序文データベースやそ...

mysql 8.0.15 winx64 解凍バージョン グラフィック インストール チュートリアル

システムをインストールした後、毎回いくつかのソフトウェアを再インストールする必要があります。ソフトウ...

シンプルな広告ウィンドウを実現するjs

この記事では、参考までに、シンプルな広告ウィンドウを実装するためのjsの具体的なコードを紹介します。...