ホームページ  >  記事  >  データベース  >  MySQLの一般クエリログとスロークエリログの簡易分析

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

不言
不言転載
2018-10-11 13:58:552470ブラウズ

この記事では、MySQL の一般的なクエリ ログとスロー クエリ ログを簡単に分析します。必要な方は参考にしてください。

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

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

2) スロークエリログ: 実行時間がlongquerytime秒を超えたすべてのクエリ、またはインデックスを使用しないクエリを記録します

(1) 一般クエリログ

学習一般ログクエリを実行するには、2 つのデータベースの共通コマンドを知っておく必要があります:

1) '%general%' のような変数を表示;

現在の一般ログ クエリが有効かどうかを確認できます。 general_log の場合、値 ON はオンであることを意味し、値 OFF はオフであることを意味します (デフォルトではオフになっています)。

1) '%log_output%' のような変数を表示します。

現在のスロー クエリ ログの出力形式を表示します。これは、FILE (データベースのデータ ファイルに保存されているホスト名.log) にすることができます。 TABLE (データベースに保存される mysql.general_log) にすることもできます。

質問: MySQL の一般クエリ ログを開く方法、および出力される一般ログの出力形式を設定する方法を教えてください。

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

一般的に、クエリの速度が遅いのは大きなテーブル (例: テーブルに数百万のデータがある) で発生し、現時点ではクエリ条件のフィールドにインデックスが作成されていません。条件は、フル テーブル スキャン、long_query_time は時間がかかる、

は遅いクエリ ステートメントです。

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

MySQL にコマンドを入力します:

show variables like '%quer%';

主に次のパラメータをマスターします:

(1) 値low_query_log を ON にするとスロー クエリ ログが有効になり、OFF にするとスロー クエリ ログが閉じられます。

(2) throw_query_log_file の値は、ファイルに記録されたスロー クエリ ログです (注: デフォルト名は hostname.log です。スロー クエリ ログを指定したファイルに書き込むかどうかは、スロー クエリの出力ログ形式はファイルです。関連するコマンドは次のとおりです。出力形式を表示するには、「%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)

set globallog_output='TABLE';

スロー クエリ ログはテキスト (つまり、slow_query_log_file で指定されたファイル) にのみ出力されます

setglobal log_output ='FILE';

ここで皆さんに建築学習・交流グループをお勧めします。コミュニケーションおよび学習グループ番号: 478030634。上級アーキテクトによって記録されたいくつかのビデオを共有します: Spring、MyBatis、Netty ソース コード分析、高同時実行性の原則、高性能、分散、マイクロサービス アーキテクチャ、JVM パフォーマンスの最適化、分散アーキテクチャなど。建築家にとって必須の知識体系となっています。無料の学習リソースも受け取ることができ、これまでのところ多くのメリットがあります

スロークエリログはテキストとテーブルに同時に出力されます

setglobal log_output='FILE,TABLE';

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

myql.slow_log テーブルのスロー クエリ ログ レコードの形式は次のとおりです:

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

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

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

次の形式で、次のことがわかります。これはテーブルまたはファイルであり、具体的に記録されます: はい そのステートメントにより、クエリ (sql_text)、クエリ時間 (query_time)、テーブル ロック時間 (Lock_time)、およびスキャンされた行数 (rows_examined) が遅くなりました。クエリステートメントが遅い。

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

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

コマンドを入力してください: show global status like '%slow%';

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

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

追加の知識ポイント: MySQL 独自のスロー クエリ ログ分析ツール mysqldumpslow を使用してログを分析する方法は?

perlmysqldumpslow –s c –t 10 throw-query.log

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

-s は、c、t、l、の並べ替え方法を示します。 r レコード数、時間、クエリ時間、および返されたレコード数に従って並べ替えられます。 ac、at、al、ar は、対応するフラッシュバックを表し、次のデータを意味します。戻り値を表します。前に何行あるかを表します。

-g の後には、大文字と小文字を区別しない正規表現のマッチングを続けることができます。

MySQLの一般クエリログとスロークエリログの簡易分析上記のパラメータの意味は次のとおりです。

Count:414 ステートメントは 414 回出現します。 ##Time =3.51s (1454) 最大実行時間は 3.51 秒、消費された累積合計時間は 1454 秒です。

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

Rows=2194.9 (9097604) クライアントに送信される最大行数は 2194.9、クライアントに送信される関数の累積数は 90976404

(注: mysqldumpslow スクリプトは Perl 言語で書かれており、特に mysqldumpslow の使用方法については後で説明します)

質問: 実際の学習プロセスでは、スロー クエリ セットが効果的であることはどのようにしてわかりますか?

これは非常に簡単です。たとえば、低速クエリ log_query_time の値を 1 に設定すると、次のステートメントを実行できます。 1);

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

以上がMySQLの一般クエリログとスロークエリログの簡易分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。