MySQL スロークエリ pt-query-digest スロークエリログの分析

MySQL スロークエリ pt-query-digest スロークエリログの分析

1. はじめに

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

2. pt-query-digestをインストールする

1. ダウンロードページ: https://www.percona.com/doc/percona-toolkit/2.2/installation.html

2. Perlモジュール

yum インストール -y perl-CPAN perl-Time-HiRes

3. インストール手順

方法1: rpmインストール

/usr/local/src をコピーします
percona.com/get/percona-toolkit.rpm を実行します。
yum インストール -y percona-toolkit.rpm

ツールのインストールディレクトリは/usr/binです。

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

/usr/local/src をコピーします
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
作成 && インストール

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

4. 各ツールの使用方法の紹介(詳細:https://www.percona.com/doc/percona-toolkit/2.2/index.html)

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

pt-クエリダイジェスト /usr/local/mysql/data/slow.log

(2)サーバー概要

pt-要約

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

pt-ディスク統計

(4)MySQLサービスステータスサマリー

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

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

  1. pt-query-digest [オプション] [ファイル] [DSN]
  2. --create-review-table --review パラメータを使用して分析結果をテーブルに出力する場合、テーブルが存在しない場合は自動的に作成されます。
  3. --create-history-table --history パラメータを使用して分析結果をテーブルに出力する場合、テーブルが存在しない場合は自動的に作成されます。
  4. --filter は、入力されたスロークエリを分析する前に、指定された文字列に従って一致させてフィルタリングします。
  5. --limit は、出力結果の割合または数を制限します。デフォルト値は 20 で、最も遅い 20 個のステートメントが出力されることを意味します。50% の場合、合計応答時間の割合に応じて大きいものから小さいものの順にソートされ、合計が 50% に達すると出力が終了します。
  6. --host mysqlサーバアドレス
  7. --user mysql ユーザー名
  8. --password mysql ユーザパスワード
  9. --history は分析結果をテーブルに保存します。分析結果は比較的詳細です。次回 --history を使用するときに、同じステートメントが存在し、クエリの時間間隔が履歴テーブルと異なる場合は、データテーブルに記録されます。同じ CHECKSUM をクエリすることで、特定の種類のクエリの履歴変更を比較できます。
  10. --review は分析結果をテーブルに保存します。この分析はクエリ条件をパラメータ化しているだけなので、1 つのクエリ タイプにつき 1 つのレコードとなり、比較的単純です。次回 --review を使用するときに、同じステートメント分析が存在する場合、それはデータ テーブルに記録されません。
  11. --output 分析結果の出力タイプ。値は、report(標準分析レポート)、slowlog(MySQL スローログ)、json、json-anon のいずれかです。読みやすさの点から、通常は report が使用されます。
  12. --since 分析を開始する時間。値は文字列です。「yyyy-mm-dd [hh:mm:ss]」の形式で指定された時間ポイント、または単純な時間値(s(秒)、h(時間)、m(分)、d(日))になります。たとえば、12h は、統計が 12 時間前から開始されることを意味します。
  13. --until 期限を --since と組み合わせると、一定期間にわたって遅いクエリを分析できます。

4. pt-query-digestの出力結果を分析する

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

全体: クエリは全部でいくつありますか

時間範囲: クエリ実行の時間範囲

unique: ユニークなクエリの数、つまりクエリ条件をパラメータ化した後の異なるクエリの合計数

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

95%: すべての値を小さいものから大きいものの順に並べると、一般的に 95% の数値が最も参考になります。

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

# ツールは、ユーザー時間、システム時間、物理メモリ使用量、仮想メモリ使用量のログ分析を実行します。# ユーザー時間 340 ミリ秒、システム時間 140 ミリ秒、rss 23.99M、vsz 203.11M
# ツール実行時間# 現在の日付: 2016 年 11 月 25 日金曜日 02:37:18
# 分析ツールが稼働しているホスト名# ホスト名: localhost.localdomain
# ファイル: slow.log
# 全体: 合計 2、ユニーク 2、QPS 0.01、同時実行 0.01x ________________
# ログ記録の時間範囲 # 時間範囲: 2016-11-22 06:06:18 から 06:11:40
# 属性 合計 最小 最大 平均 95% 標準偏差 中央値
# =========== ======= ======= ======= ======= ======= ======= ======= =======
# ステートメント実行時間# 実行時間 3秒 640ミリ秒 2秒 1秒 2秒 999ミリ秒 1秒
# ロック時間 # ロック時間 1ms 0 1ms 723us 1ms 1ms 723us
# クライアントに送信された行数 # 送信された行数 5 1 4 2.50 4 2.12 2.50
# SELECT文は行をスキャンします # 行を調べます 186.17k 0 186.17k 93.09k 186.17k 131.64k 93.09k
# クエリ内の文字数# クエリサイズ 455 15 440 227.50 440 300.52 227.50

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

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

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

応答: 合計応答時間

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

呼び出し: 実行回数、つまりこの分析に含まれるこのタイプのクエリ文の数

R/Call: 実行あたりの平均応答時間

V/M: 応答時間の変動性と平均値の比

項目: クエリオブジェクト

# プロフィール
# 順位 クエリID 応答時間 通話数 R/通話 V/M 項目
# ==== ===================== ============= ====== ====== ====== ==================
# 1 0xF9A57DD5A41825CA 2.0529 76.2% 1 2.0529 0.00 選択
# 2 0x4194D8F83F4F9365 0.6401 23.8% 1 0.6401 0.00 wx_member_baseを選択

パート3: 各クエリの詳細な統計

以下のクエリの詳細な統計結果から、実行回数、最大、最小、平均、95% などの各項目の統計が上部の表に一覧表示されます。

ID: クエリID番号。上図のクエリIDに対応します。

データベース: データベース名

ユーザー: 各ユーザーの実行回数 (パーセンテージ)

Query_time distribution: クエリ時間の分布。長さは間隔の比率を反映します。この例では、1 秒から 10 秒の間のクエリの数は、10 秒を超えるクエリの 2 倍です。

テーブル: クエリに関係するテーブル

説明: SQL ステートメント

# クエリ 1: 0 QPS、0x 同時実行、ID 0xF9A57DD5A41825CA、バイト 802 ______
# この項目は --limit に一致するためレポートに含まれます。
# スコア: V/M = 0.00
# 時間範囲: すべてのイベントは 2016-11-22 06:11:40 に発生しました
# 属性 pct 合計 最小 最大 平均 95% 標準偏差 中央値
# ============ === ========= ======== ======== ======== ======= ======= ======= ========
# カウント 50 1
# 実行時間 76 2秒 2秒 2秒 2秒 2秒 0 2秒
# ロック時間 0 0 0 0 0 0 0 0
送信行数 20 1 1 1 1 1 0 1
# 行数を調べる 0 0 0 0 0 0 0 0
# クエリサイズ 3 15 15 15 15 15 0 15
# 弦:
# データベーステスト
# ホスト 192.168.8.1
# ユーザー mysql
# クエリ時間の分布
# 1us
# 10us
# 100us
# 1ミリ秒
# 10ミリ秒
# 100ミリ秒
# 1秒 #########################################################################
# 10秒以上
# EXPLAIN /*!50100 パーティション*/
スリープ(2)\Gを選択

5. 使用例

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. 分析は、選択文を含む遅いクエリを参照します

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. 低速クエリはすべてフルテーブルスキャンまたはフル結合でクエリする

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 任意 -c 1000 ポート 3306 > mysql.tcp.txt
pt-query-digest --type tcpdump mysql.tcp.txt> slow_report9.log

10. バイナリログを分析する

mysqlbinlog mysql-bin.000093 > mysql-bin000093.sql
pt-クエリダイジェスト --type=binlog mysql-bin000093.sql > slow_report10.log

11. 一般的なログを分析する

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

要約する

上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に少しでもお役に立てれば幸いです。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM をご愛顧いただき、ありがとうございます。

以下もご興味があるかもしれません:
  • MySql のスロークエリ分析とスロークエリログの開き方の詳細説明
  • mysql のスロークエリを有効にする方法 mysql のスロークエリのログを有効にする方法
  • MYSQL5.7.9 でスロークエリログを有効にするヒント
  • MySQL のスロークエリログを有効にする方法 log-slow-queries
  • MySQL のスロークエリの最適化とスロークエリのログ分析の例のチュートリアル
  • MySQL でスロークエリログを有効にする方法
  • MySQL のオンライン スロー クエリ ログを正しく安全にクリアする方法
  • MySQL スロークエリログの分析に関する基本チュートリアル
  • MySQL スロークエリログの設定と使用方法のチュートリアル
  • MYSQL スロークエリとログ設定とテスト

<<:  Linux で Sudo を使用して権限を委譲する

>>:  要素 el-button ボタンコンポーネントの使用の詳細な説明

推薦する

CentOS 8.1 で LEMP (Linux+Nginx+MySQL+PHP) 環境を構築する (チュートリアルの詳細)

目次ステップ1: CentOS 8でパッケージを更新するステップ2: CentOS 8にNginx ...

シンプルなスネークゲームを実現するネイティブjs

この記事では、スネークゲームを実装するためのjsの具体的なコードを参考までに共有します。具体的な内容...

Linux nlコマンドの使い方

1. コマンドの紹介nl (行数) は指定されたファイルに行番号を追加し、標準出力に書き込みます。フ...

MySQL で重複しない携帯電話番号テーブルをバッチ生成する方法のサンプルコード

序文多くの MySQL テスト シナリオでは、テスト用に一部のテスト データを手動で生成する必要があ...

ホスト上のDockerコンテナ内でシェルまたはプログラムを実行する

Docker コンテナに繰り返し入って操作することを避けるために、コンテナ内の一連の命令をホストマシ...

複数の例で HTML フォームを使用する方法

参考までに、HTMLフォームの使い方を9つの簡単な例で分析します。具体的な内容は次のとおりです。 1...

HTML ハイパーリンクの詳細な説明

ハイパーリンクハイパーリンクは、Web サイト上のすべてのページがハイパーリンクで接続され、ページ間...

CentOS 上での MySQL 5.6 のコンパイルとインストール、および複数の MySQL インスタンスのインストールの詳細な説明

--1. mysql用の新しいグループとユーザーを作成する # ユーザー追加 -M -s /sbin...

Vue が DingTalk の出勤カレンダーを実装

この記事では、DingTalkの勤怠カレンダーを実装するためのVueの具体的なコードを参考までに共有...

HTML ウェブページ画像タグ

画像タグ <IMG> を挿入します。今日私たちが目にするカラフルなウェブページはすべて、...

MySQL で誤って削除したテーブル データを回復する方法 (必読)

バックアップがあれば、非常に簡単です。最新のバックアップ データを生成し、mysqlbinlog を...

Viteプロジェクトを作成する手順

目次序文yarn create は何をしますか?ソースコード分析プロジェクトの依存関係テンプレート構...

CSS 属性を使用してマウス イベントをブロックする方法 (マウス クリックは上位の要素を貫通する可能性があります)

由来: 数日前、テスターから写真を見るという要件が送られてきました。 この要件を見たとき、私は少し混...

mysql5.6 の無効な utf8 設定の問題を解決する

mysql5.6 のグリーン バージョンを解凍すると、my-default.ini ファイルが作成さ...

MySQL 8.0.15 インストール グラフィック チュートリアルとデータベースの基礎

MySQLソフトウェアのインストールとデータベースの基礎は参考用です。具体的な内容は次のとおりです。...