ホームページ  >  記事  >  データベース  >  MySQL のスロークエリログの pt-query-digest 分析の詳細な紹介

MySQL のスロークエリログの pt-query-digest 分析の詳細な紹介

黄舟
黄舟オリジナル
2017-03-20 14:15:119040ブラウズ

この記事では主に MySQL スロークエリログの pt-query-digest 分析に関する関連情報を紹介します。記事内の紹介は非常に詳細であり、必要な方は以下を参照してください。 。 バー。

1. はじめに

pt-query-digest は、mysql のスロークエリを分析するためのツールであり、binlog、一般ログ、slowlog を分析でき、SHOWPROCESSLIST または tcpdump を通じて MySQL のプロトコル データをキャプチャすることもできます。分析。分析結果はファイルに出力できます。分析プロセスでは、まずクエリ ステートメントの条件をパラメータ化し、次にパラメータ化されたクエリに対してグループ統計を実行して、各クエリの実行時間、回数、割合を計算できます。分析 その結果、問題が特定され、最適化されます。

2. pt-query-digest

2.perlモジュールをインストールします

方法1: rpmインストール

yum install -y perl-CPAN perl-Time-HiRes

ツールのインストールディレクトリは次のとおりです。

方法 2: ソースコードのインストール

cd /usr/local/src
wget percona.com/get/percona-toolkit.rpm
yum install -y percona-toolkit.rpm

ツールのインストールディレクトリは: /usr/local/percona-toolkit/bin

4. 各ツールの使い方の紹介

(1) スロークエリログ分析統計

cd /usr/local/src
wget percona.com/get/percona-toolkit.tar.gz
tar zxf percona-toolkit.tar.gz
cd percona-toolkit-2.2.19
perl Makefile.PL PREFIX=/usr/local/percona-toolkit
make && make install

(2) サーバーの概要

pt-query-digest /usr/local/mysql/data/slow.log

(3) サーバーディスクの監視

pt-summary

(4) mysql サービスステータスの概要

pt-diskstats

3. pt-query-digest 構文と重要なオプション

pt- query-digest [OPTIONS ] [FILES] [DSN]
  1. --create-review-table --review パラメータを使用して分析結果をテーブルに出力する場合、テーブルが存在しない場合は自動的に作成されます。
  2. --create-history-table --history パラメータを使用して分析結果をテーブルに出力する場合、テーブルが存在しない場合は自動的に作成されます。
  3. --filter 指定された
  4. string
  5. に従って入力スロークエリを照合およびフィルターし、分析します。

    --limit 出力結果のパーセンテージまたは数を制限します。デフォルト値は 20 です。最も遅い 20 ステートメントが出力されます。50% の場合、合計応答時間に応じて大きい順にソートされ、合計が 50% に達すると出力が打ち切られます。
  6. --ホストmysqlサーバーアドレス
  7. --user mysqlユーザー名
  8. --password mysqlユーザーパスワード
  9. --history 分析結果をテーブルに保存します。分析結果はより詳細になります。 , 次回 --history を使用すると、同じステートメントが存在し、クエリの時間間隔が履歴テーブルの時間間隔と異なる場合、データ テーブルに記録され、特定の種類の履歴の変更を比較できます。同じ CHECKSUM をクエリすることによってクエリの内容を確認します。
  10. --review 分析結果をテーブルに保存します。この分析では 1 つのクエリ条件のみをパラメータ化します。これは比較的単純です。次回 --review を使用した場合、同じステートメント分析が存在する場合、データテーブルには記録されません。
  11. -- 出力分析結果の出力タイプ。値はレポート (標準分析レポート)、slowlog (Mysql スロー ログ)、
  12. json
  13. 、json-anon にすることができます。通常は読みやすいようにレポートを使用します。

    --since は、分析が開始されてからの時刻です。値は、「yyyy-mm-dd [hh:mm:ss]」の形式で指定された時点です。値は単純な時間です: s (秒)、h (時間)、m (分)、d (日)。たとえば、12h は 12 時間前に開始された統計を意味します。
  14. -- 期限まで、 -- と組み合わせると、一定期間にわたる遅いクエリを分析できます。

  15. IV. pt-query-digest の出力結果の分析

パート 1: 全体的な統計結果

全体: 合計でクエリの数は何ですか? 時間範囲:クエリ実行

unique: 一意のクエリの数、つまり、クエリ条件をパラメータ化した後に存在する異なるクエリの数


total: 合計 min: 最小 max: 最大 avg: 平均


95%: すべてを削減値を小さいものから大きいものへ並べます、95%に位置する数値、一般にこの数値が最も参考値になります


median: 中央値、すべての値を小さいものから大きいものまで並べます、中央に位置する数値

pt-mysql-summary -- --user=root --password=root

パート 2: クエリグループの統計結果


ランク: すべてのステートメントのランキング。デフォルトではクエリ時間で降順に並べ替えられ、--order-by で指定されます。

クエリ ID: ステートメントの ID、 (余分なスペースとテキスト文字を削除し、
ハッシュ
値を計算します)


Response: 合計応答時間

time: この分析におけるこのクエリの合計時間の割合

calls: 実行回数、つまり実行方法この分析には、このタイプのクエリ ステートメントが多数含まれています


R/Call: 各実行の平均応答時間


V/M: 応答時間の分散対平均比


Item:查询对象

# Profile
# Rank Query ID   Response time Calls R/Call V/M Item
# ==== ================== ============= ===== ====== ===== ===============
# 1 0xF9A57DD5A41825CA 2.0529 76.2%  1 2.0529 0.00 SELECT
# 2 0x4194D8F83F4F9365 0.6401 23.8%  1 0.6401 0.00 SELECT wx_member_base

第三部分:每一种查询的详细统计结果

由下面查询的详细统计结果,最上面的表格列出了执行次数、最大、最小、平均、95%等各项目的统计。

ID:查询的ID号,和上图的Query ID对应

Databases:数据库名

Users:各个用户执行的次数(占比)

Query_time distribution :查询时间分布, 长短体现区间占比,本例中1s-10s之间查询数量是10s以上的两倍。

Tables:查询中涉及到的表

Explain:SQL语句

# Query 1: 0 QPS, 0x concurrency, ID 0xF9A57DD5A41825CA at byte 802 
# This item is included in the report because it matches --limit.
# Scores: V/M = 0.00
# Time range: all events occurred at 2016-11-22 06:11:40
# Attribute pct total  min  max  avg  95% stddev median
# ============ === ======= ======= ======= ======= ======= ======= =======
# Count   50  1
# Exec time  76  2s  2s  2s  2s  2s  0  2s
# Lock time  0  0  0  0  0  0  0  0
# Rows sent  20  1  1  1  1  1  0  1
# Rows examine 0  0  0  0  0  0  0  0
# Query size  3  15  15  15  15  15  0  15
# String:
# Databases test
# Hosts  192.168.8.1
# Users  mysql
# Query_time distribution
# 1us
# 10us
# 100us
# 1ms
# 10ms
# 100ms
# 1s ################################################################
# 10s+
# EXPLAIN /*!50100 PARTITIONS*/
select sleep(2)\G

五、用法示例

1.直接分析慢查询文件:

pt-query-digest slow.log > slow_report.log

2.分析最近12小时内的查询:

pt-query-digest --since=12h slow.log > slow_report2.log

3.分析指定时间范围内的查询:

pt-query-digest slow.log --since '2017-01-07 09:30:00' --until '2017-01-07 10:00:00'> > slow_report3.log

4.分析指含有select语句的慢查询

pt-query-digest --filter '$event->{fingerprint} =~ m/^select/i' slow.log> slow_report4.log

5.针对某个用户的慢查询

pt-query-digest --filter '($event->{user} || "") =~ m/^root/i' slow.log> slow_report5.log

6.查询所有所有的全表扫描或full join的慢查询

pt-query-digest --filter '(($event->{Full_scan} || "") eq "yes") ||(($event->{Full_join} || "") eq "yes")' slow.log> slow_report6.log

7.把查询保存到query_review表

pt-query-digest --user=root –password=abc123 --review h=localhost,D=test,t=query_review--create-review-table slow.log

8.把查询保存到query_history表

pt-query-digest --user=root –password=abc123 --review h=localhost,D=test,t=query_history--create-review-table slow.log_0001
pt-query-digest --user=root –password=abc123 --review h=localhost,D=test,t=query_history--create-review-table slow.log_0002

9.通过tcpdump抓取mysql的tcp协议数据,然后再分析

tcpdump -s 65535 -x -nn -q -tttt -i any -c 1000 port 3306 > mysql.tcp.txt
pt-query-digest --type tcpdump mysql.tcp.txt> slow_report9.log

10.分析binlog

mysqlbinlog mysql-bin.000093 > mysql-bin000093.sql
pt-query-digest --type=binlog mysql-bin000093.sql > slow_report10.log

11.分析general log

pt-query-digest --type=genlog localhost.log > slow_report11.log

总结

以上がMySQL のスロークエリログの pt-query-digest 分析の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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