MySQL のログには、エラー ログ、バイナリ ログ、一般クエリ ログ、スロー クエリ ログなどが含まれます。ここでは、主に、一般的なクエリ ログとスロー クエリ ログという 2 つのよく使用される機能を紹介します。 1. 一般クエリ ログ: 確立されたクライアント接続と実行されたステートメントを記録します。 2. スロークエリログ: 実行にlongquerytime秒以上かかるクエリやインデックスを使用しないクエリをすべて記録します。 1. 一般的なクエリログ 一般的なログ クエリを学習するときは、次の 2 つのデータベースの共通コマンドを知っておく必要があります。 1) 現在の一般ログクエリが有効かどうかを確認できます。general_log の値が ON の場合は有効、OFF の場合は無効です (デフォルトでは無効です)。 2) 現在のスロークエリログの出力形式を表示します。これは、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 で次のコマンドを入力します: 主に以下のパラメータを習得します。 (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 には、現在の遅いクエリ ステートメントの数を具体的に記録する変数があります。 次のコマンドを入力します: (注: 上記のすべてのコマンドにおいて、パラメータが MySQL シェルを通じて設定されている場合、MySQL を再起動すると、設定されたすべてのパラメータが無効になります。永続的に有効にするには、構成パラメータを my.cnf ファイルに書き込む必要があります)。 追加の知識ポイント: MySQL の組み込みスロークエリログ分析ツール mysqldumpslow を使用してログを分析するにはどうすればよいですか? 具体的なパラメータ設定は次のとおりです。 -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 に設定されている場合、次のステートメントを実行できます。 このステートメントは、遅いクエリ ステートメントです。その後、対応するログ出力ファイルまたはテーブルにこのようなステートメントがあるかどうかを確認できます。 要約する 以上が、MySQL の一般クエリ ログとスロー クエリ ログの分析についてご紹介した内容です。お役に立てれば幸いです。ご質問がある場合は、メッセージを残していただければ、すぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。 以下もご興味があるかもしれません:
|
<<: フロントエンドセキュリティの詳細な説明: JavaScript の http ハイジャック対策と XSS
>>: Docker で MySQL を起動したときに SQL 文を自動的に実行する方法
目次1. 基礎知識: 2. DHCPサーバーの設定: 1. サーバーのIPを確認する2. DHCP ...
目次1. 関数を宣言する2. 関数の呼び出し3. 関数パラメータ4. 関数の戻り値5. 議論の使用6...
重複キーの置換と挿入の違い置換の使用法競合がない場合、挿入と同等となり、他の列のデフォルト値が使用さ...
大規模な Web サイトでは、多数の同時アクセスを処理するために、Web サイト上の分散負荷分散以上...
この記事では、Gobangゲームを実装するためのキャンバスの具体的なコードを参考までに共有します。具...
JWT の紹介JWTとは正式名称はJSON Web Tokenで、現在最も人気のあるクロスドメイン認...
この記事では、カルーセルの効果を実現するためのJavaScriptの具体的なコードを参考までに共有し...
注: sg11 弊社では Linux システム仮想ホストのセルフインストールのみサポートしております...
目次1 配列のフラット化とは何ですか? 2 JS標準ライブラリの配列フラット化メソッド3 フラットメ...
この記事では、CentOS 7 に Chrome ブラウザをインストールする方法を紹介します。詳細は...
目次序文1. まず、既存のバージョンの MySQL を完全にアンインストールします。 2. deb ...
環境の準備 Docker環境 MySQL 5.7 (公式イメージはmysql8をサポートしていません...
この記事では、参考までに、Vue の具体的なコードを共有して、簡単なショッピングカートを実装します。...
1. useState: 関数コンポーネントに状態を持たせる使用例: // カウンター impor...
目次クロスドメインの理由JSONP Nginxソリューションバックエンドソリューションクロスドメイン...