ホームページ  >  記事  >  データベース  >  mysqlのスロークエリとは何ですか

mysqlのスロークエリとは何ですか

青灯夜游
青灯夜游オリジナル
2022-02-17 16:37:107215ブラウズ

mysql では、スロー クエリとは、ログに記録され、実行速度が遅い SQL ステートメントであり、「long_query_time」パラメータで設定された時間しきい値を超える SQL ステートメント クエリを指します。スロークエリはスロークエリログに記録され、どのクエリ文の実行効率が低いかを把握し、最適化を図ることができます。

mysqlのスロークエリとは何ですか

このチュートリアルの動作環境: Windows7 システム、mysql8 バージョン、Dell G3 コンピューター。

スロー クエリとは

スロー クエリは、名前が示すように、実行速度が遅い SQL ステートメントをログに記録することです。これは、mysql が、設定された時間しきい値を超えるすべての SQL ステートメントを記録することを意味します。 long_query_time パラメータによって異なります。

スロークエリはスロークエリログに記録され、どのクエリ文の実行効率が低いかを把握し、最適化を図ることができます。このログは、SQL ステートメントの最適化に非常に役立ちます。

デフォルトでは、スロー クエリ ログはオフになっています。スロー クエリ ログ機能を使用するには、まずスロー クエリ ログ機能を有効にする必要があります。

スロー クエリ ログの構成

1. スロー クエリの基本構成

    ## throw_query_log の開始および停止テクノロジのスロー クエリ ログ
  • throw_query_log_file はスロークエリログの保存パスとファイルを指定します (デフォルトはデータファイルと一緒に配置されます)
  • long_query_time はスロークエリログを記録するための SQL 実行時間の値を指定します (単位: 秒、デフォルトは 10)
  • log_queries_not_using_indexes インデックスを使用しない SQL を記録するかどうか
  • log_output ログの保存場所 [TABLE][FILE][FILE, TABLE]
低速クエリを設定すると、条件の SQL

が次のように記録されます。

    クエリ ステートメント
  • データ変更ステートメント
  • SQLロールバックされました

2. 実際の操作:

次のコマンドで上記の設定を確認してください:

show VARIABLES like '%slow_query_log%'
show VARIABLES like '%slow_query_log_file%'
show VARIABLES like '%long_query_time%'
show VARIABLES like '%log_queries_not_using_indexes%'
show VARIABLES like 'log_output'

パラメータを設定しますスロークエリの:

set global long_query_time=0;   ---默认10秒,这里为了演示方便设置为0
set GLOBAL  slow_query_log = 1; --开启慢查询日志
set global log_output='FILE,TABLE'  --项目开发中日志只能记录在日志文件中,不能记表中

設定が完了したら、いくつかのリストをクエリすると、スロークエリのログ ファイルにデータがあることがわかります。

しかし、私のコンピュータでは、理由はわかりませんが、現時点では SQL 結果を正常に実行できません。更新できません;

そのため、次の方法を使用できます:

my.cnf を見つけて次のコンテンツを追加します

# 添加慢查询日志
log_output=file
slow_query_log=on
slow_query_log_file = /tmp/mysql-slow.log
log_queries_not_using_indexes=on
long_query_time = 1

3. スロー クエリ ログを確認します

どのクエリ ステートメントの実行効率が低いかを確認したい場合は、スロー クエリ ログから情報を取得できます。エラー ログやクエリ ログと同様、スロー クエリ ログもテキスト ファイルの形式で保存され、通常のテキスト ファイル表示ツールを使用して表示できます。

例 1

MySQL のスロークエリログ機能を有効にして時間を設定する コマンドと実行プロセスは次のとおりです:

mysql> SET GLOBAL slow_query_log=ON;
Query OK, 0 rows affected (0.05 sec)

mysql> SET GLOBAL long_query_time=0.001;
Query OK, 0 rows affected (0.00 sec)

ここではデモする必要があるため、時間を 0.001 秒に設定すると、実行に 0.001 秒以上かかる SQL ステートメントがログに記録されます。

tb_student テーブル内のデータをクエリする場合、SQL ステートメントと実行プロセスは次のとおりです。

mysql> USE test;
Database changed
mysql> SELECT * FROM tb_student;
+----+--------+
| id | name   |
+----+--------+
|  1 | Java   |
|  2 | MySQL  |
|  3 | Python |
+----+--------+
3 rows in set (0.08 sec)

これに対応して、低速クエリ ログの一部は次のとおりです。

# Time: 2020-06-01T01:59:18.368780Z
# User@Host: root[root] @ localhost [::1]  Id:     3
# Query_time: 0.006281  Lock_time: 0.000755 Rows_sent: 2  Rows_examined: 1034
use test;
SET timestamp=1590976758;
SHOW VARIABLES LIKE 'slow_query%';

4. スロークエリログの削除

スロークエリログの削除方法は、一般ログの削除方法と同様です。 mysqladmin コマンドを使用して削除できます。手動で削除することもできます。 mysqladmin コマンドの構文は次のとおりです。

mysqladmin -uroot -p flush-logs

このコマンドを実行すると、コマンド ラインでパスワードの入力を求めるプロンプトが表示されます。正しいパスワードを入力すると削除が実行されます。新しいスロー クエリ ログは古いクエリ ログを直接上書きするため、手動で削除する必要はありません。

データベース管理者は、スロー クエリ ログを手動で削除することもできます。削除後は、MySQL サービスを再起動する必要があります。

注: このコマンドは、一般クエリ ログとスロー クエリ ログの両方で使用されます。使用する場合は注意が必要です。このコマンドを実行すると、一般クエリ ログとスロー クエリ ログが記録されます。新しいログ ファイルにのみ存在します。古いスロークエリログファイルをバックアップする必要がある場合は、まず古いログの名前を変更してから、MySQL サービスを再起動するか、mysqladmin コマンドを実行する必要があります。

[関連する推奨事項:

mysql ビデオ チュートリアル ]

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。