MySQL スローログ実践のまとめ

MySQL スローログ実践のまとめ

遅いログクエリ機能

スロー ログ クエリの主な機能は、設定された時間しきい値を超える SQL ステートメント内のクエリ ステートメントを記録することです。たとえば、クエリ SQL ステートメントの場合、しきい値を 1 秒に設定します。このクエリ ステートメントの実行時間が 1 秒を超えると、スロー クエリ構成ログに書き込まれます。

スロークエリは主に SQL ステートメントを最適化するために使用されます。

低速クエリ構成項目の説明

mysqlサービスにログインし、次のコマンドを使用します。

mysql> '%query%' のような変数を表示します。
+------------------------------+-----------------------------------------+
| 変数名 | 値 |
+------------------------------+-----------------------------------------+
| binlog_rows_query_log_events | オフ |
| ft_query_expansion_limit | 20 |
| クエリキャッシュがある | はい |
| 長いクエリ時間 | 10.000000 |
| クエリ割り当てブロックサイズ | 8192 |
| クエリキャッシュ制限 | 1048576 |
| クエリ キャッシュの最小解像度単位 | 4096 |
| クエリキャッシュサイズ | 33554432 |
| クエリキャッシュタイプ | オフ |
| query_cache_wlock_invalidate | オフ |
| クエリ事前割り当てサイズ | 8192 |
| slow_query_log | オフ |
| slow_query_log_file | /usr/local/mysql/var/localhost-slow.log |
+------------------------------+-----------------------------------------+
セット内の行数は 13 です (0.01 秒)

ここでは、3 つの構成項目にのみ焦点を当てる必要があります。

1.スロークエリログ

この構成項目は、スロー ログ クエリ機能を有効にするかどうかを決定します。構成値は ON または OFF です。

2. 遅いクエリログファイル

この構成項目は、スロー ログ クエリの記録ファイルであり、手動で作成する必要があります。

3.長いクエリ時間

この構成項目は、スロー ログ クエリの時間しきい値を設定します。このしきい値を超えると、スロー ログが記録されます。構成値は 0 (すべての SQL ステートメントが記録されます) または > 0 (特定のしきい値) です。この構成項目は秒単位で、小数に設定できます。

4. インデックスを使用しないログクエリ

この構成項目は、インデックスを使用しない SQL ステートメントを記録するために使用されます。

スロークエリの設定方法

スロークエリ機能を設定するには、2 つの方法があります。1 つは MySQL 設定ファイルを使用する方法で、もう 1 つは MySQL コマンドを使用する方法です。コマンド設定の過程で、set コマンドを使用すると設定項目は成功するものの、クエリがまだ設定されないことがあるため、設定ファイルを使用することをお勧めします。

1. 設定ファイルの設定

// [mysqld] を見つけて、その下に次のコードを追加します。
slow_query_log=オン
slow_query_log_file=/usr/local/mysql/var/localhost-slow.log
長いクエリ時間=0
インデックスを使用しないログクエリ = 1
// 設定後、mysqlサービスを再起動します

2. コマンド設定を使用する

// ここで必要な構成項目は 1 つだけであり、他の構成項目は次のように構成されます。mysql> set slow_query_log=ON;

設定後、MySQL スロー クエリ ログが正常に設定されているかどうかを確認します。

mysql> '%query%' のような変数を表示します。
+------------------------------+-----------------------------------------+
| 変数名 | 値 |
+------------------------------+-----------------------------------------+
| binlog_rows_query_log_events | オフ |
| ft_query_expansion_limit | 20 |
| クエリキャッシュがある | はい |
| 長いクエリ時間 | 0.000000 |
| クエリ割り当てブロックサイズ | 8192 |
| クエリキャッシュ制限 | 1048576 |
| クエリ キャッシュの最小解像度単位 | 4096 |
| クエリキャッシュサイズ | 33554432 |
| クエリキャッシュタイプ | オフ |
| query_cache_wlock_invalidate | オフ |
| クエリ事前割り当てサイズ | 8192 |
| slow_query_log | オン |
| slow_query_log_file | /usr/local/mysql/var/localhost-slow.log |
+------------------------------+-----------------------------------------+
セット内の行数は 13 です (0.01 秒)

スローログレコードの表示方法

スロークエリを構成する前にサンプルデータファイルをインポートしたので、ここでは個別のデモンストレーションは行いません。 MySQL 公式データベースの例。次に、クエリ操作の実行を開始します。

mysql> city='Salala' の場合、city から * を選択します。
+---------+--------+-----------+---------------------+
| 都市 ID | 都市 | 国 ID | 最終更新日 |
+---------+--------+-----------+---------------------+
| 444 | サララ | 71 | 2006-02-15 04:45:25 |
+---------+--------+-----------+---------------------+
セット内の1行(0.01秒)

この時点で、スロークエリログファイル /usr/local/mysql/var/localhost-slow.log を構成し、このファイルに上記のコマンド操作が記録されていることを確認しました。

# 時間: 2019-01-17T08:12:27.184998Z
# ユーザー@ホスト: root[root] @ localhost [] Id: 4
# クエリ時間: 0.002773 ロック時間: 0.001208 送信行数: 1 検査行数: 600
タイムスタンプを1547712747に設定します。
city='Salala' の場合、city から * を選択します。

アピールファイルの構成内容の説明

1.時間

ログが記録された時刻

2.ユーザー@ホスト

MySQL ログインユーザーとログインホストアドレス

3. Query_time行

1 番目はクエリ時間、2 番目はテーブル ロック時間、3 番目は返された行数、4 番目はスキャンされた行数です。

4.タイムスタンプを設定する

これはMySQLクエリの時間です

5.SQL文

この行は非常に明白で、実行したSQL文を表しています。

要約する

long_query_time=0 と設定しているので、すべての SQL ステートメントが記録されます。ここでは仮定します。 long_query_time=5 に設定しましたが、上記の 3 番目の項目で Query_time が 5 より大きくなっています。実際のプロジェクトで正常範囲内にない場合は、最適化する必要があります。もちろん、最適化する方法はたくさんあります。簡単なインデックス方式を使用して最適化してみましょう。

SQL文を最適化する

1. まず元のSQL文の実行構造を確認する

mysql> explain select * from city where city='Salala'\G;
************************** 1. 行 ****************************
      id: 1
 選択タイプ: シンプル
    テーブル: 都市
  パーティション: NULL
     タイプ: すべて
可能なキー: NULL
     キー: NULL
   キー長さ: NULL
     参照: NULL
     行数: 600
   フィルター: 10.00
    追加: where の使用
セットに 1 行、警告 1 件 (0.00 秒)
mysql> city(`city`) にインデックス idx_cityName を作成します。
クエリは正常、影響を受けた行は 0 行 (0.03 秒)
レコード: 0 重複: 0 警告: 0

SQL ステートメントがフルスキャンを実行していることがわかります。インデックスを使用して単純に最適化します。

2. インデックスを作成する

mysql> city(`city`) にインデックス idx_cityName を作成します。
クエリは正常、影響を受けた行は 0 行 (0.03 秒)
レコード: 0 重複: 0 警告: 0

3. 再度分析して説明する

mysql> explain select * from city where city='Salala'\G;
************************** 1. 行 ****************************
      id: 1
 選択タイプ: シンプル
    テーブル: 都市
  パーティション: NULL
     タイプ: ref
可能なキー: idx_cityName
     キー: idx_cityName
   キーの長さ: 152
     参照: 定数
     行数: 1
   フィルター: 100.00
    追加: NULL
セットに 1 行、警告 1 件 (0.00 秒)

インデックスを作成することで、この時点では 1 行のみがスキャンされ、インデックス スキャンが使用されるため、MySQL クエリの効率が大幅に向上することがわかりました。

MySQL のスロークエリの使用状況の概要

通常の開発では、スロークエリは MySQL を最適化する方法として非常に役立ちます。クエリ時間が長い SQL ステートメントの一部を記録し、それらを分析して SQL クエリ ステートメントを最適化します。ただし、スロー ログ クエリを有効にすると、SQL クエリの関連レコードがディスク I/O を介してディスク ファイルに書き込まれるため、ディスク I/O の読み取りと書き込みが増加します。したがって、この機能は本番環境ではなく、開発環境とテスト環境で使用します。

スローログクエリツール

スロー ログ クエリ ファイルが新しいほど、含まれるコンテンツが多くなります。分析に対するプレッシャーが大きければ大きいほど、迅速な分析を実現するために何らかのツールを使用する必要が出てきます。私はまだこれらのツールに十分精通していません。この種のツールを紹介する別の記事を後で書く予定です。ここではツール名だけをリストします。
1.mysqldumpslow
2.pt-クエリダイジェスト
3.mysqltop (うさぎ)

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

以下もご興味があるかもしれません:
  • MySQL のスローログ監視の誤報問題の分析と解決
  • MySQLスローログクエリの詳細な説明
  • ツールの構築と使用の詳細な紹介。Anemometer は MySQL のスローログをグラフィカルに表示します。
  • MySQL のスローログオンラインの問題と最適化ソリューション
  • MySQL 5.5 でスロー ログを有効にする方法 (log_slow_queries)
  • MySQL で時間別にスローログ情報を取得する方法
  • MySQLスローログに基づいてSQL文の実行効率を監視する
  • MySQLスローログに関する知識のまとめ

<<:  uniappの無痛トークンリフレッシュ方法の詳細な説明

>>:  CentOS8 yum/dnfで国内ソースを設定する方法

推薦する

異なるドメイン名への PC または携帯電話のアクセスを区別するように Nginx を構成する方法

新しい公式サイトはオンラインですが、携帯電話で新しい公式サイトにアクセスすると、エクスペリエンスが非...

CocosCreator で http と WebSocket を使用する方法

目次1. HTTPGET 2. HTTP POSTウェブソケット4. Egretのhttpとwebs...

HTML ウェブページのメタビューポート属性の説明

HTML メタビューポート属性の説明ビューポートとはモバイル ブラウザは、Web ページを仮想の「ウ...

MySQLインデックスを正しく作成する方法

インデックス作成は大学図書館の書誌インデックスの構築に似ており、データ検索の効率を向上させ、データベ...

MySQL データベース トランザクション例のチュートリアル

目次1. トランザクションとは何ですか? 2. トランザクションに関連するステートメントは、挿入、削...

calc() で全画面背景の固定幅コンテンツを実現

ここ数年、Web デザインには「全幅背景と固定幅コンテンツ」というトレンドが生まれています。このデザ...

Nginx はリクエスト接続を統合し、ウェブサイトのアクセス例を高速化します

序文世界最高の Web サーバーの 1 つである Nginx の利点は明らかです。 Nginx がリ...

MySql5.x を MySql8.x にアップグレードする方法と手順

MySQL 5.x と MySQL 8.0.X のいくつかの違いapplication.proper...

div タグ内の要素の margin-top が無効である場合の解決策

タイトル通りです。その質問は非常に奇妙です。要素の親タグはdivで、幅や高さなどの属性は設定されてい...

HTMLタグのフルネームと機能の紹介

アルファベット順DTD: このタグが許可される XHTML 1.0 DTD を示します。 S=厳密、...

Linux の who コマンド例の紹介

誰についてシステムにログインしているユーザーを表示します。 who コマンドを実行すると、現在システ...

JavaScript における一般的な配列操作

目次1. 連結() 2. 結合() 3. プッシュ() 5. シフト() 6. シフト解除() 7....

ElementUI のネストされたテーブルに基づいて複数選択を実装するためのサンプル コード

序文:私は友人のプロジェクトのバグを修正するのを手伝ったのでこれを書きました。この関数を書くのは初め...

Linux ファイルディレクトリ管理コマンドの概要

タッチコマンドこれには 2 つの機能があります。1 つは、既存のファイルの時間タグを現在のシステム時...

Navicat 経由で MySQL にリモート接続する方法

Navicat を使用して IP 経由で直接接続すると、次のようなさまざまなエラーが報告されます: ...