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 文を自動的に実行する方法

推薦する

Centos7.4 サーバーへの Apache のインストールとインストール プロセス中に発生した問題の解決策

この記事では、CentOS 7.4 サーバーに Apache をインストールする方法と、インストール...

WordPress実験を実装するための3つの仮想マシンのKVM展開の詳細説明

1. KVM の概要カーネルベースの仮想マシンの略称は、Linux 2.6.20 以降のすべての主要...

MySQL パフォーマンス最適化のための魔法のツール、Explain の基本的な使用分析

導入MySQL には、SELECT ステートメントを分析し、開発者が最適化できるように SELECT...

W3C チュートリアル (3): W3C HTML アクティビティ

HTML は、World Wide Web 上で公開するために使用されるハイブリッド言語です。 XH...

LinuxデバッガGDBの基本的な使い方の詳細な説明

目次1. 概要2. gdbデバッグ2.1. ブレークポイントを設定する2.1.1. ブレークポイント...

位置のいくつかの巧妙な応用の詳細な説明:sticky スティッキーポジショニング

背景: position:sticky はスティッキー配置とも呼ばれます。スティッキー配置の要素は、...

Nginx 静的サービス設定の詳細な説明 (ルートとエイリアスの指示)

静的ファイルNginx は高いパフォーマンスで知られており、フロントエンドのリバース プロキシ サー...

React useMemo と useCallback の使用シナリオ

目次メモを使うコールバックの使用メモを使う親コンポーネントが再レンダリングされると、そのすべての要素...

HTMLフォーム入力監視の詳細な理解

今日、入力イベントに関するブログ投稿を見て、気まぐれで関連情報を整理してみました。イベント:関数 c...

MySQLクエリ最適化: 100万件のデータに対するテーブル最適化ソリューション

1. 2つのクエリエンジン(myIsamエンジン)のクエリ速度InnoDB はテーブル内の特定の行数...

Nest.js パラメータ検証とカスタム戻りデータ形式の詳細な説明

0x0 パラメータ検証Nest.jsでは、パラメータ検証業務のほとんどをパイプライン方式で実装してい...

優れたウェブワイヤーフレーム設計・制作ツール13選を紹介

プロジェクトの作業を開始するときは、ワイヤーフレームを使用してアイデアをスケッチすることが重要です。...

MySQL ページングクエリ最適化テクニック

ページング クエリを使用するアプリケーションでは、LIMIT と OFFSET を含むクエリが非常に...

mysql-8.0.15-winx64 解凍バージョンのインストールチュートリアルと終了する 3 つの方法

1.公式サイトからダウンロードして解凍する参考: 2. 環境変数を設定するMYSQL_HOMEをMy...

MySQLの起動と接続方法の例分析

目次mysqldの起動方法方法 1: mysqld方法 2: mysqld_safe方法3: mys...