MySQLの一般クエリログとスロークエリログの分析

MySQLの一般クエリログとスロークエリログの分析

MySQL のログには、エラー ログ、バイナリ ログ、一般クエリ ログ、スロー クエリ ログなどが含まれます。ここでは、主に、一般的なクエリ ログとスロー クエリ ログという 2 つのよく使用される機能を紹介します。

1. 一般クエリ ログ: 確立されたクライアント接続と実行されたステートメントを記録します。

2. スロークエリログ: 実行にlongquerytime秒以上かかるクエリやインデックスを使用しないクエリをすべて記録します。

1. 一般的なクエリログ

一般的なログ クエリを学習するときは、次の 2 つのデータベースの共通コマンドを知っておく必要があります。

1) show variables like '%general%';

現在の一般ログクエリが有効かどうかを確認できます。general_log の値が ON の場合は有効、OFF の場合は無効です (デフォルトでは無効です)。

2) show variables like '%log_output%';

現在のスロークエリログの出力形式を表示します。これは、FILE (データベースのデータファイルに保存されている hostname.log) または TABLE (データベースに保存されている mysql.general_log) のいずれかになります。

質問: MySQL の一般クエリ ログを有効にして、出力される一般ログ出力形式を設定するにはどうすればよいですか?

一般ログクエリを有効にする: global general_log=on を設定します。

一般的なログクエリをオフにします: set global general_log=off;

一般的なログ出力をテーブル モードに設定します: set global log_output='TABLE';

一般的なログ出力をファイル モードに設定します: set global log_output='FILE';

一般的なログ出力をテーブルおよびファイル モードに設定します。set global log_output='FILE,TABLE';

(注: 上記のコマンドは現時点でのみ有効です。MySQL を再起動すると無効になります。永続的に有効にしたい場合は、my.cnf を設定する必要があります)

my.cnf ファイルの構成は次のとおりです。

general_log=1 #1 は一般ログクエリを有効にすることを意味し、0 は一般ログクエリを無効にすることを意味します

log_output=FILE,TABLE#一般ログの出力形式をファイルとテーブルに設定する

2. スロークエリログ

MySQL スロー クエリ ログは、MySQL が提供するログ レコードの一種です。これは、応答時間がしきい値を超えた MySQL 内のステートメントを記録するために使用されます。具体的には、実行時間が long_query_time 値を超えた SQL ステートメントがスロー クエリ ログに記録されます (ログはファイルまたはデータベース テーブルに書き込むことができます。パフォーマンス要件が高い場合は、ファイルに書き込むことをお勧めします)。デフォルトでは、MySQL データベースはスロー クエリ ログを有効にしません。long_query_time のデフォルト値は 10 (つまり 10 秒、通常は 1 秒に設定) です。つまり、10 秒を超えて実行されるステートメントはスロー クエリ ステートメントです。

一般的に、遅いクエリは大きなテーブル(たとえば、数百万のデータを含むテーブル)で発生し、クエリ条件のフィールドにインデックスが作成されていません。このとき、クエリ条件に一致するフィールドはテーブル全体でスキャンされます。費やされた時間が long_query_time を超える場合、遅いクエリステートメントです。

質問: 現在のスロー クエリ ログが有効になっているかどうかを確認するにはどうすればよいでしょうか?

MySQL で次のコマンドを入力します:

show variables like '%quer%';

主に以下のパラメータを習得します。

(1) slow_query_logの値がONの場合スロークエリログが有効になり、OFFの場合スロークエリログが無効になります。

(2) slow_query_log_file の値は、スロークエリログが記録されるファイルです (注: デフォルト名は hostname.log です。スロークエリログが指定されたファイルに書き込まれるかどうかは、スロークエリの出力ログ形式をファイルとして指定する必要があります。出力形式を表示するための関連コマンドは、show variables like '%log_output%' です)。

(3)long_query_timeは、低速クエリのしきい値を指定します。ステートメントの実行時間がこのしきい値を超えると、低速クエリステートメントとみなされます。デフォルト値は10秒です。

(4) log_queries_not_using_indexes 値が ON に設定されている場合、インデックスを使用しないすべてのクエリがログに記録されます (注: log_queries_not_using_indexes のみを ON に設定し、slow_query_log を OFF に設定した場合、この設定は有効になりません。つまり、この設定が有効になる前提は、slow_query_log の値が ON に設定されていることです)。通常は、パフォーマンスチューニング中に一時的に有効になります。

質問: MySQL スロー クエリの出力ログ形式をファイル、テーブル、またはその両方に設定しますか?

次のコマンドを通じて: '%log_output%' のような変数を表示します。

出力形式は、log_output の値を通じて確認できます。上記の値は TABLE です。もちろん、出力形式をテキストに設定したり、テキストとデータベース テーブルを同時に記録したりすることもできます。設定するコマンドは次のとおりです。

#テーブルへの遅いクエリログ出力 (つまり、mysql.slow_log)
globallog_output='TABLE' を設定します。
#スロークエリログはテキストのみに出力されます(つまり、slow_query_log_fileで指定されたファイル)
グローバル log_output='FILE' を設定します。
# 遅いクエリログはテキストとテーブルに同時に出力されます setglobal log_output='FILE,TABLE';

スロー クエリ ログのテーブル内のデータ テキストのデータ形式の分析:

スロー クエリ ログは、次の形式で myql.slow_log テーブルに記録されます。

スロークエリ ログは、次の形式で hostname.log ファイルに記録されます。

ご覧のとおり、テーブルとファイルの両方に、低速クエリの原因となったステートメント (sql_text)、低速クエリ ステートメントのクエリ時間 (query_time)、テーブル ロック時間 (Lock_time)、およびスキャンされた行数 (rows_examined) などの情報が記録されています。

質問: 現在の低速クエリ ステートメントの数を照会するにはどうすればよいですか?

MySQL には、現在の遅いクエリ ステートメントの数を具体的に記録する変数があります。

次のコマンドを入力します: show global status like '%slow%';

(注: 上記のすべてのコマンドにおいて、パラメータが MySQL シェルを通じて設定されている場合、MySQL を再起動すると、設定されたすべてのパラメータが無効になります。永続的に有効にするには、構成パラメータを my.cnf ファイルに書き込む必要があります)。

追加の知識ポイント: MySQL の組み込みスロークエリログ分析ツール mysqldumpslow を使用してログを分析するにはどうすればよいですか?

perlmysqldumpslow –sc –t 10 slow-query.log

具体的なパラメータ設定は次のとおりです。

-s はソート方法を示します。c、t、l、r は、それぞれレコード数、時間、クエリ時間、返されたレコード数でソートされます。ac、at、al、ar は、対応する逆ソ​​ートを示します。

-t は先頭を意味し、それに続くデータは返されるレコードの数を示します。

-g の後には大文字と小文字を区別しない正規表現の一致が続きます。


上記のパラメータの意味は次のとおりです。

カウント:414 この文は414回出現しました。

時間=3.51秒(1454) 最長実行時間は3.51秒で、合計累積時間は1454秒です。

ロック=0.0秒(0)ロックを待機する最大時間は0秒で、ロックを待機する累積時間は0秒です。

行数=2194.9 (9097604) クライアントに送信される行の最大数は2194.9で、クライアントに送信される関数の合計数は90976404です。

(注: mysqldumpslow スクリプトは Perl 言語で書かれています。mysqldumpslow の具体的な使用方法については後で説明します。)

質問: 実際の学習プロセスでは、設定した低速クエリが効果的であることをどのようにして知るのでしょうか?

とても簡単です。スロー クエリ ステートメントを手動で生成できます。たとえば、スロー クエリ log_query_time の値が 1 に設定されている場合、次のステートメントを実行できます。

selectsleep(1);

このステートメントは、遅いクエリ ステートメントです。その後、対応するログ出力ファイルまたはテーブルにこのようなステートメントがあるかどうかを確認できます。

要約する

以上が、MySQL の一般クエリ ログとスロー クエリ ログの分析についてご紹介した内容です。お役に立てれば幸いです。ご質問がある場合は、メッセージを残していただければ、すぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。

以下もご興味があるかもしれません:
  • MySQLエラーログを表示する方法
  • Ubuntu で MySQL を起動、停止、再起動し、エラー ログを表示するコマンド
  • MySQL で一般クエリ ログを有効にして使用する方法の例のチュートリアル
  • MySQL の一般クエリ ログを使用して最も頻繁にクエリされるステートメントを見つけるチュートリアル
  • MySQLエラーログと一般クエリログの詳細な分析

<<:  フロントエンドセキュリティの詳細な説明: JavaScript の http ハイジャック対策と XSS

>>:  Docker で MySQL を起動したときに SQL 文を自動的に実行する方法

推薦する

Tomcat のパフォーマンス最適化のための Apr モジュールの構築方法

序文Tomcat は、無数のチューニング オプションを備えた、広く使用されている Java Web ...

背景とリンクとして画像を書き込む方法(背景画像+リンク)

写真を背景にしてリンクを記載します。たとえば、ウェブサイトのロゴ画像などです。例: ポテトのロゴ画像...

Django+mysql の設定と簡単な操作データベースのサンプルコード

ステップ1: MySQLドライバをダウンロードするcmdは作成されたDjangoプロジェクトディレク...

auto.jsを使用して毎日の自動チェックイン機能を実現する

auto.js を使用して毎日のチェックインを自動化する感染症のせいで、毎日時間通りに家に帰らなけれ...

VMware 仮想マシンのインストール Apple Mac OS の超詳細なチュートリアル

目次要約する仕事の都合で Apple の Mac OS に対応するソフトウェアをインストールする必要...

Vue の proto ファイルの関数呼び出しのグラフィカルな説明

1. protoをコンパイルするすべての .proto ファイルを保存するために、src フォルダー...

ファイルの種類を検出するJavaScriptメソッド

目次1. 画像のバイナリデータを表示する方法2. 絵の種類の見分け方3. 画像の種類を検出する方法3...

Virtualbox で Ubuntu 16.04 の起動時に共有ディレクトリを自動的にマウントする最良の方法

仮想マシンを使用する人は通常、操作と使用を容易にするために仮想マシン用の共有ディレクトリを設定します...

MySQLデッドロックの原因と解決策

データベースは、オペレーティング システムと同様に、複数のユーザーが使用する共有リソースです。複数の...

vue+element を使用した Google プラグインの開発プロセス全体

シンプルな機能: ブラウザの右上隅にあるプラグイン アイコンをクリックすると小さなポップアップ ウィ...

MySQL の中国語ソートの詳細と例

MySQL の漢字ソートの詳細な説明デフォルトでは、MySQL は日付、時刻、および英語の文字列の並...

W3Cチュートリアル(1):W3Cを理解する

1994 年に設立された組織である W3C は、共通プロトコルの開発を促進し、それらの相互運用性を確...

Vueはコンピュータカメラを呼び出して写真機能を実現します

この記事の例では、コンピュータカメラを呼び出して写真機能を実現するためのvueの具体的なコードを参考...

jquery+springbootでファイルアップロード機能を実現

この記事の例では、ファイルアップロード機能を実現するためのjquery+springbootの具体的...

Vue画像拡大鏡コンポーネントのカプセル化と使用方法の詳細な説明

Vue画像拡大鏡コンポーネントパッケージに基づいて、参考までに具体的な内容は次のとおりです。画像拡大...