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

推薦する

LinuxでDHCPサーバーを構築する方法

目次1. 基礎知識: 2. DHCPサーバーの設定: 1. サーバーのIPを確認する2. DHCP ...

JavaScript関数の使い方の詳細な説明

目次1. 関数を宣言する2. 関数の呼び出し3. 関数パラメータ4. 関数の戻り値5. 議論の使用6...

MySQLで論理SQLを置き換える際の落とし穴を回避する方法の詳細な説明

重複キーの置換と挿入の違い置換の使用法競合がない場合、挿入と同等となり、他の列のデフォルト値が使用さ...

MySQLのマスタースレーブ構成を使用して、読み取りと書き込みの分離を実現し、データベースの負荷を軽減します。

大規模な Web サイトでは、多数の同時アクセスを処理するために、Web サイト上の分散負荷分散以上...

Gobangゲームを実現するためのjsキャンバス

この記事では、Gobangゲームを実装するためのキャンバスの具体的なコードを参考までに共有します。具...

Nodeはkoa2を使用してシンプルなJWT認証方式を実装します

JWT の紹介JWTとは正式名称はJSON Web Tokenで、現在最も人気のあるクロスドメイン認...

カルーセル例の JavaScript 実装

この記事では、カルーセルの効果を実現するためのJavaScriptの具体的なコードを参考までに共有し...

Linux 仮想ホストで SourceGuardian (sg11) 暗号化コンポーネントを有効にする詳細な手順

注: sg11 弊社では Linux システム仮想ホストのセルフインストールのみサポートしております...

JavaScript インタビュー: 配列の平坦化メソッドを実装する方法

目次1 配列のフラット化とは何ですか? 2 JS標準ライブラリの配列フラット化メソッド3 フラットメ...

CentOS 7にChromeブラウザをインストールする方法

この記事では、CentOS 7 に Chrome ブラウザをインストールする方法を紹介します。詳細は...

MySQL 8.0 アップグレード体験

目次序文1. まず、既存のバージョンの MySQL を完全にアンインストールします。 2. deb ...

docker に nacos をインストールしてデータベースを構成する詳細なチュートリアル

環境の準備 Docker環境 MySQL 5.7 (公式イメージはmysql8をサポートしていません...

Vueはシンプルなショッピングカートの例を実装します

この記事では、参考までに、Vue の具体的なコードを共有して、簡単なショッピングカートを実装します。...

React Hook の使用例 (一般的なフック 6 つ)

1. useState: 関数コンポーネントに状態を持たせる使用例: // カウンター impor...

ウェブ開発におけるクロスドメインの理由に対する複数のソリューション

目次クロスドメインの理由JSONP Nginxソリューションバックエンドソリューションクロスドメイン...