MySQL スロークエリ関連パラメータの原理の分析

MySQL スロークエリ関連パラメータの原理の分析

MySQL スロー クエリ (正式名称はスロー クエリ ログ) は、MySQL によって提供されるログ レコードであり、応答時間がしきい値を超えた MySQL のステートメントを記録するために使用されます。特定の環境では、実行時間が long_query_time 値を超える SQL ステートメントがスロー クエリ ログに記録されます。 long_query_time のデフォルト値は 10 です。つまり、10 秒を超えて実行されるステートメントがログに記録されます。デフォルトでは、MySQL データベースはスロー クエリ ログを開始しないため、このパラメータは手動で設定する必要があります。

もちろん、チューニングに必要がない場合は、スロークエリログを有効にするとパフォーマンスに多少の影響が出るため、このパラメータを有効にすることは一般的には推奨されません。

さらに、スロー クエリ ログは、ファイルおよびデータベース テーブルへのログ レコードの書き込みをサポートします。

MySQL の遅いクエリに関連するパラメータの説明:

  • l slow_query_log: スロークエリログを有効にするかどうか。1 は有効、0 は無効を意味します。
  • l log-slow-queries: MySQL データベースの古いバージョン (バージョン 5.6 未満) のスロー クエリ ログの保存パス。このパラメータを設定しない場合、システムはデフォルトのファイルhost_name-slow.logを使用します。
  • l slow-query-log-file: MySQL データベースの新しいバージョン (5.6 以上) のスロー クエリ ログの保存パス。このパラメータを設定しない場合、システムはデフォルトのファイルhost_name-slow.logを使用します。
  • l long_query_time: 遅いクエリのしきい値。クエリ時間が設定されたしきい値を超えると、ログが記録されます。
  • l log_queries_not_using_indexes: インデックスを使用しないクエリもスロークエリログに記録されます (オプション)。
  • l log_output: ログの保存方法。 log_output='FILE' はログをファイルに保存することを意味します。デフォルト値は 'FILE' です。 log_output='TABLE' は、ログをデータベースに保存することを意味します。

では、スロークエリログをどのように構成するのでしょうか?デフォルトでは、slow_query_log の値は OFF になっており、スロー クエリ ログは無効になっています。次のように slow_query_log の値を設定すると、これを有効にできます。

'%slow_query_log%' のような変数を表示します。

+----------------------+-----------------------------------------------+
| 変数名 | 値 |
+----------------------+-----------------------------------------------+
| slow_query_log | オフ |
| slow_query_log_file | /home/WDPM/MysqlData/mysql/DB-Server-slow.log |
+----------------------+------------------------------------------------+

セット内の 2 行 (0.00 秒)

set global slow_query_log=1 を使用してスロー クエリ ログを有効にすると、現在のデータベースにのみ影響し、MySQL を再起動すると無効になります。永続的に有効にしたい場合は、設定ファイル my.cnf を変更する必要があります (他のシステム変数についても同様です)

グローバル slow_query_log=1 を設定します。

my.cnf で slow_query_log および slow_query_log_file パラメータを追加または変更するには、次のようにします。

遅いクエリログ = 1

slow_query_log_file = /tmp/mysql_slow.log

slow_query_log_file パラメータは、スロー クエリ ログの保存パスを指定するために使用されます。デフォルトは、host_name-slow.log ファイルです。

'slow_query_log_file' のような変数を表示します。

+---------------------+-----------------------------------------------+

 | 変数名 | 値 |

 +---------------------+-----------------------------------------------+

 | slow_query_log_file | /home/WDPM/MysqlData/mysql/DB-Server-slow.log |

 +---------------------+-----------------------------------------------+

 セット内の 1 行 (0.00 秒)

スロー クエリ ログを有効にすると、スロー クエリ ログにはどのような SQL が記録されますか?これはパラメータ long_query_time によって制御されます。デフォルトでは、long_query_time の値は 10 秒です。コマンドまたは my.cnf パラメータを使用して変更できます。

実行時間が long_query_time とまったく同じ状況は記録されません。つまり、MySQL ソース コードでは、long_query_time より大きいと判断され、それ以上と判断されることはありません。

MySQL 5.1 以降、long_query_time は、以前は秒単位でのみ記録されていた SQL ステートメントの実行時間をマイクロ秒単位で記録し始めます。テーブルに記録する場合は、マイクロ秒部分ではなく整数部分のみが記録されます。

ローカル設定方法を使用する場合、場合によっては次のことが発生する可能性があることに注意してください。以下を参照してください。

'long_query_time%' のような変数を表示します。
# 現在の long_query_time を表示します +-----------------+-----------+

 | 変数名 | 値 |

 +-----------------+-----------+

 | 長いクエリ時間 | 10.000000 |

 +-----------------+-----------+

グローバル long_query_time=4 を設定します。
# 現在の long_query_time 時間を設定します。'long_query_time' のような変数を表示します。
# long_query_timeを再度確認する

上記のように、変数 long_query_time は変更されていますが、クエリ変数 long_query_time の値は 10 のままです。変更されていない可能性はありますか?注: コマンド set global long_query_time=4 を使用して時間を変更した後、変更された値を確認するには再接続するか、新しいセッションを開く必要があります。現在のセッションの変数値のみを表示するには、「long_query_time」などの show variables を使用します。セッションを再接続する代わりに、「long_query_time」のようなグローバル変数を表示することもできます。

log_output パラメータは、スロー クエリ ログの保存方法を指定します。

l log_output='FILE' は、ログをファイルに保存することを意味します。デフォルト値も 'FILE' です。

l log_output='TABLE' は、ログをデータベースに保存し、ログ情報が mysql.slow_log テーブルに書き込まれることを意味します。また、2 つのログ保存方法もサポートされており、設定時にコンマで区切ることができます (例: log_output='FILE,TABLE')。

システムの専用ログ テーブルにログを記録すると、ファイルにログを記録する場合よりも多くのシステム リソースが消費されます。したがって、低速クエリ ログを有効にしてシステム パフォーマンスを向上させる必要がある場合は、最初にファイルにログを記録することをお勧めします。

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

+---------------+-------+

| 変数名 | 値 |

+---------------+-------+

| ログ出力 | ファイル |

+---------------+-------+

グローバル log_output='TABLE' を設定します。

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

+---------------+-------+

| 変数名 | 値 |

+---------------+-------+

| ログ出力 | テーブル |

+---------------+-------+

sleep(5)を選択します。

+----------+

| 睡眠(5) |

+----------+

| 0 |

+----------+

上記の sleep5 を実行すると、この操作がスロークエリログに記録されます。見てみましょう:

mysql> mysql.slow_log から * を選択します。

 +---------------------+----------------------------+------------+------------+------------+---------------+----+----------------+-------------+------------+

 | 開始時刻 | ユーザーホスト | クエリ時間 | ロック時間 | 送信行数 | 検査済み行数 | db | 最終挿入 ID | 挿入 ID | サーバー ID | SQL テキスト | スレッド ID |

 +---------------------+----------------------------+------------+------------+------------+---------------+----+----------------+-------------+------------+

 | 2016-06-16 17:37:53 | root[root]@localhost [] | 00:00:03 | 00:00:00 | 1 | 0 | | 0 | 0 | 1 | sleep(3) を選択 | 5 |

 | 2016-06-16 21:45:23 | root[root]@localhost [] | 00:00:05 | 00:00:00 | 1 | 0 | | 0 | 0 | 1 | sleep(5) を選択 | 2 |

 +---------------------+----------------------------+------------+------------+------------+---------------+----+----------------+-------------+------------+

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Mysql sql スロークエリ監視スクリプトコード例
  • MySQL の遅いクエリを見つける方法
  • MySQLのスロークエリの詳細な説明
  • MySQL のスロークエリの方法と例
  • MySQL 5.7 のスロークエリログの時間がシステム時間より 8 時間遅れている理由の詳細な説明
  • MySQL の遅いクエリの最適化方法と最適化の原則
  • MySQL スロークエリを通じて MySQL のパフォーマンスを最適化する方法
  • MySQL でスロークエリログ機能を有効にする方法
  • MySQL スロークエリログの設定と使用方法のチュートリアル
  • MySQL でスロークエリログを有効にする方法
  • MySQL の遅いクエリの例

<<:  Docker Compose マルチコンテナデプロイメントの実装

>>:  Vue2.x における双方向バインディングの原理と実装

推薦する

MySQLは現在の日付と時刻を取得する関数の例の詳細な説明

現在の日付 + 時刻 (日付 + 時刻) を取得する関数: now() mysql> now(...

IE8 ベータ 1 には注意が必要な 2 つの領域があります

<br />関連記事: Web スキル: 複数の IE バージョンを共存させるソリューシ...

MySQLの基礎知識学習ノート

データベースを表示show databases;データベースを作成するDATABASE データベース...

MySQLデータベース入門:データベースバックアップ操作の詳細な説明

目次1. 単一データベースのバックアップ2. 圧縮バックアップ3. マルチデータベースバックアップ4...

WeChatミニプログラムはどのようにしてユーザー情報とユーザーの電話番号を同時に取得するのか

今日ログインページを書いていたとき、個人情報と携帯電話番号を認証する必要がありましたが、ページにボタ...

CentOS7.4 に MySQL 5.7.26 をインストールするための詳細なチュートリアル

CentOS にはデフォルトで MariaDB がインストールされていますが、これは MySQL の...

CentOS8でルートパスワードを素早く変更する方法

Centos8仮想マシンを起動し、上下キーを押して図1のインターフェースの最初の行を選択します。図1...

イントラネット侵入を実現するためのSSHポート転送

LAN 内のマシンは外部ネットワークにアクセスできますが、外部ネットワークは内部ネットワークにアクセ...

vue-admin-template 動的ルーティング実装例

ログインを提供し、ユーザー情報データインターフェースを取得するapi/user.js内 '@...

シンプルなドラッグ効果を実現するjs

この記事では、簡単なドラッグ効果を実現するためのjsの具体的なコードを参考までに共有します。具体的な...

CSS変数がJSインタラクティブコンポーネント開発にもたらす改善と変更のサンプルコードの詳細な説明

1. CSS変数がもたらす質的変化CSS 変数によってもたらされる改善は、CSS コードの節約や C...

Alibaba Cloud Server Ubuntu 設定チュートリアル

Alibaba Cloud のカスタム Ubuntu イメージのインポートには、OSS スナップショ...

JavaScript と CSS を最適化してウェブサイトのパフォーマンスを向上させる

<br /> 第 1 部と第 2 部では、Web サイトのパフォーマンス、ページ コンテ...

Vueはファイルのアップロードとダウンロード機能を実装します

この記事では、ファイルのアップロードとダウンロード機能を実装するためのVueの具体的なコードを例とし...