Mysql の遅いクエリ操作の概要

Mysql の遅いクエリ操作の概要

MySQL の遅いクエリの説明

MySQL スロー クエリ ログは、MySQL が提供するログ レコードの一種です。これは、応答時間がしきい値を超えた MySQL のステートメントを記録するために使用されます。具体的には、実行時間が long_query_time 値を超えた SQL ステートメントがスロー クエリ ログに記録されます。 long_query_time のデフォルト値は 10 です。これは、ステートメントが 10 秒以上実行されることを意味します。デフォルトでは、MySQL データベースはスロー クエリ ログを開始しないため、このパラメータを手動で設定する必要があります。もちろん、チューニングに必要でない場合は、スロー クエリ ログをオンにすると、多かれ少なかれパフォーマンスに影響が出るため、このパラメータを開始することは一般的に推奨されません。スロー クエリ ログは、ファイルおよびデータベース テーブルへのログ レコードの書き込みをサポートします。スロー クエリ ログは、管理者が問題を分析する際に役立つスロー クエリ ステートメントを記録するために使用されます。ログはデフォルトでは有効になっていないため、構成ファイルに一連のパラメータを追加して手動で有効にする必要があります。

MySQLスロークエリを有効にする理由

データベースはボトルネックが発生しやすい場所です。Nosql は現在非常に熱く議論されており、誰もがデータベースに不満を抱いていると思います。 MySQL の速度に最も大きな影響を与えるステートメントは、クエリが非常に遅いステートメントです。これらの遅いステートメントは、不適切に記述されているか、大規模なデータの下で複数のテーブルを結合したクエリである可能性があります。したがって、これらのステートメントを見つけて、理由を分析し、最適化する必要があります。これがこのブログ記事を投稿する理由でもあります

MySQL スロークエリを有効にする方法

1) 方法1: MySQLデータベースターミナルにログインして開く

mysql> show variables like "%long%"; <SPAN style="COLOR: #ff00ff"> // デフォルトのスロークエリ時間 10 秒をチェックします</SPAN> 
+-----------------+-----------+  
| 変数名 | 値 |  
+-----------------+-----------+  
| 長いクエリ時間 | 10.000000 |  
+-----------------+-----------+  
セット内の 1 行 (0.00 秒)  
  
mysql> set global long_query_time=1; <SPAN style="COLOR: #ff00ff">// 1 秒に設定し、グローバルを追加すると、次回 mysql に入ったときに有効になります</SPAN>  
クエリは正常、影響を受けた行は 0 行 (0.00 秒)  
 
mysql> show variables like "%slow%"; <SPAN style="COLOR: #ff00ff"> // スロークエリが有効になっているかどうかを確認します</SPAN> 
+---------------------+---------------------------------+  
| 変数名 | 値 |  
+---------------------+---------------------------------+  
| log_slow_queries | オフ |  
| 遅い起動時間 | 2 |  
| slow_query_log | オフ |  
| slow_query_log_file | /usr/local/mysql/mysql-slow.log |  
+---------------------+---------------------------------+  
セット内の 4 行 (0.00 秒)  
  
mysql> set slow_query_log='ON'; <SPAN style="COLOR: #ff00ff"> //グローバルを追加します。そうしないとエラーが報告されます</SPAN> 
エラー 1229 (HY000): 変数 'slow_query_log' はグローバル変数なので、SET GLOBAL で設定する必要があります。 
mysql> set global slow_query_log='ON'; <SPAN style="COLOR: #ff00ff">//このパラメータを ON に設定すると、実行時間が特定の値を超える SQL ステートメントをキャプチャできるスロークエリが有効になります。 </SPAN> 
クエリは正常、影響を受けた行は 0 行 (0.28 秒)  
  
mysql> show variables like "%slow%"; <SPAN style="COLOR: #ff00ff">//有効になっているかどうかを確認します</SPAN> 
+---------------------+---------------------------------+  
| 変数名 | 値 |  
+---------------------+---------------------------------+  
| log_slow_queries | オン |  
| 遅い起動時間 | 2 |  
| slow_query_log | オン |  
| slow_query_log_file | /usr/local/mysql/mysql-slow.log |  
+---------------------+---------------------------------+  
セット内の 4 行 (0.00 秒)

方法2: MySQL設定ファイルmy.cnfを変更する

[root@www ~]# vim /etc/mysql.cnf
[mysqld]エリアの設定に以下の内容を追加します。
......

slow_query_log = 1 //スロークエリログを開きます。1をONに変更することもできます
long_query_time = 1 //mysql のスロークエリ時間。スロークエリと見なされるまでの秒数を指定します。1 秒を超える実行ステートメントをスロークエリログに記録するように設定することをお勧めします。
slow_query_log_file= /var/lib/mysql/mysql-slow.log // スロークエリログのパス。ここで、slow_query_log_file を log-slow-queries に変更できます。
// 主に上記の3行の内容ですが、詳細な設定として次の行を追加することもできます
long-queries- not-using-indexes //インデックスを使用しないクエリステートメントを記録する
min_examined_row_limit = 1000 // レコードを最大 1000 回検索することでクエリが遅くなります
log-slow-admin-statements //ALTER TABLE やその他のステートメントによって発生した遅いクエリを記録する
log-slow-slave-statements //サーバーから生成された遅いクエリを記録する

分析ツール

分析ツールは、実際に mysql-slow.log に記録されたデータを分析して表示します (実際には、必要な情報を抽出するためのシェル スクリプトを作成することもできます)。

[root@www ~]# cat mysql-slow.log //コマンドを表示

/usr/local/mysql/libexec/mysqld、バージョン: 5.1.26-rc-log (ソース配布)。次で開始:  
TCP ポート: 3306 Unix ソケット: /tmp/mysql.sock  
時間IDコマンド引数  
# 時刻: 100814 13:28:30  
# ユーザー@ホスト: root[root] @ localhost []  
# クエリ時間: 10.096500 ロック時間: 0.045791 送信行数: 1 検査行数: 2374192  
タイムスタンプを1281763710に設定します。  
ad_visit_history から count(distinct ad_code) を x として選択します。ad_code が (media_id=15 の ad_list から ad_code を選択します)。  
# 時間: 100814 13:37:02  
# ユーザー@ホスト: root[root] @ localhost []  
# クエリ時間: 10.394134 ロック時間: 0.000091 送信行数: 1 検査行数: 2374192  
タイムスタンプを1281764222に設定します。  
ad_visit_history から count(distinct ad_code) を x として選択します。ad_code が (media_id=15 の ad_list から ad_code を選択します)。  
# 時間: 100814 13:37:16  
# ユーザー@ホスト: root[root] @ localhost []  
# クエリ時間: 4.608920 ロック時間: 0.000078 送信行数: 1 検査行数: 1260544  
タイムスタンプを1281764236に設定します。  
ad_visit_history から cou として count(*) を選択し、ad_code in (ad_list から ad_code を選択し、id=41 の場合)、id desc で順序付けします。

ご覧の通り、実行時間やロック時間など、SQL 文の実行状況を記録するだけなので、分析ツールを使用するかどうかは個人の状況によります。分析ツールは数多くありますが、ここでは MySQL に付属しているスロークエリ分析ツールである mysqldumpslow の使い方についてのみ説明します。

[root@www ~]# mysqldumpslow -h

オプションhには引数が必要です  
エラー: 不正なオプション 
  
使用方法: mysqldumpslow [ OPTS... ] [ LOGS... ]  
  
MySQLのスロークエリログを解析して要約します。オプションは次のとおりです。  
  
 --verbose 詳細  
 --debug デバッグ  
 --help このテキストを標準出力に書き込む  
  
 -v 詳細  
 -d debug //エラー チェック -s ORDER 何を基準に並べ替えるか (t、at、l、al、r、ar など)、'at' がデフォルト //並べ替え方法: クエリ回数、時間、ロック時間、返されるレコード数 -r 並べ替え順序を逆にする (最初ではなく最後が最大) //並べ替えを逆にする -t NUM 上位 n 件のクエリのみを表示する //上位 N 件のクエリを表示する -a すべての数値を N に、文字列を 'S' に抽象化しない 
 -n NUM 名前に少なくとも n 桁の数字が含まれる抽象的な数字 //名前に少なくとも n 桁の数字が含まれる抽象的な数字 -g PATTERN grep: この文字列を含む文のみ考慮 //構成モード -h HOSTNAME *-slow.log ファイル名の db サーバーのホスト名 (ワイルドカードも可)、 //MySQL マシン名または IP 
 デフォルトは「*」で、すべてに一致します 
 -i NAME サーバーインスタンス名(mysql.server 起動スクリプトを使用している場合) 
 -l 合計時間からロック時間を減算しない //合計時間からロック時間を減算しない

例:

[root@BlackGhost bin]# ./mysqldumpslow -sr -t 20 /var/lib/mysql/mysql-slow.log

[root@BlackGhost bin]# ./mysqldumpslow -sr -t 20 -g 'count' /var/lib/mysql/mysql-slow.log

MySQL の遅いクエリ操作に関する上記の要約は、私が皆さんと共有したいことのすべてです。これが皆さんの参考になれば幸いです。また、123WORDPRESS.COM をサポートしていただければ幸いです。

以下もご興味があるかもしれません:
  • MySQLデータベースでスロークエリログを有効にする方法の詳細な説明
  • MySQL スロークエリ: スロークエリを有効にする
  • MySQL でスロークエリのログ記録を有効にする方法
  • mysqldumpslow の使用例 (遅いクエリ)
  • MySQL でスロークエリファイルをクリアする方法
  • MySQLの遅いクエリが失敗の原因となった
  • MySQL 5.7.10 でスロークエリを有効にする方法の詳細な説明

<<:  JavaScriptはブラウザがIEかどうかを判定します

>>:  実用的な基本的な Linux sed コマンドのサンプルコード

推薦する

HTMLは角丸四角形を簡単に実装します

質問: div+css と配置を使用して角丸四角形を実現するにはどうすればよいですか?ソリューション...

mysql 解凍パッケージの基本インストールチュートリアル

新しいコンピューターに変更したので、すべての環境を新しいコンピューター上で設定する必要があります。ふ...

Node.js コンソールで強調表示されたコードを印刷する方法

序文コードを実行してエラーが発生すると、エラーが出力されます。エラーにはスタック情報が含まれており、...

CSSの一般的なプロパティ

CSS の背景: background:#00ffee; //背景色を設定するbackground-...

CSSの優先度を理解する2つの方法

方法1: 値を追加する公式の説明を見るには MDN にアクセスしてください。優先度はどのように計算さ...

CSS3は円錐グラデーション効果を実現します

文法:背景画像: 円錐グラデーション(位置の角度から、開始色、...、最後の色)最初のパラメータ:開...

html の img src="" で js 関数または js 変数を呼び出して、画像パスを動的に指定します。

この問題に関して、オンライン リソースをたくさん見つけました。ここにいくつかの方法を示します。コード...

Reactでwindow.print()を使用した際にページが応答しなくなる問題の解決記録について

目次1. 問題の背景: 2. 問題の原因: 3. 問題解決:要約: 1. 問題の背景: window...

vsFTP 3.0.3 のコンパイルとインストールの詳細な分析

脆弱性の詳細VSFTP は、GPL に基づいてリリースされた Unix ライクなシステムで使用される...

コマンドを使用してMySQLデータベース(de1)を作成する方法

1. MYSQLに接続するフォーマット: mysql -h ホストアドレス -u ユーザー名 -p ...

HTML内の画像はbase64でエンコードされた文字列に直接置き換えられます

最近、画像はあるのに外部画像リソースが参照されていないウェブページを見つけました。気になりました。コ...

js は、州、市、地区の 3 段階の選択カスケードを実装します。

この記事では、省、市、地区の3段階選択を実現するためのjsの具体的なコードを紹介します。具体的な内容...

MySQLのunion allとunionの違いを簡単に理解する

Union は、重複行を除外し、デフォルトのソートを実行する、データに対する結合操作です。Union...

npmとcnpmを混在させる際の落とし穴の詳細な説明

目次原因理由NPM の紹介: CNPM の紹介:より良い方法方法の改善npm と cnpm を一緒に...

Windows で MySQL 5.7.17 圧縮バージョンをインストールするときに遭遇する落とし穴

まず、Windows 64 ビット用の最新の MySQL 5.7.17 コミュニティ圧縮バージョンを...