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 ボタンコンポーネントの使用の詳細な説明

推薦する

Linux システムによって報告される tcp_mark_head_lost エラーの処理方法

問題の説明最近、ホストから次のカーネル情報が報告されました。 7月8日 10:47:42 cztes...

CSS のオーバーフロー:hidden エラーの解決方法

失敗の原因今日、カルーセルを書いていたときに、overflow;hidden; が失敗する可能性があ...

1 つの記事で Vue ミドルウェア パイプラインを学ぶ

SPA を構築する場合、多くの場合、特定のルートを保護する必要があります。たとえば、認証されたユーザ...

CSSはコーナーカット+ボーダー+投影+コンテンツ背景色のグラデーション効果を実現します

CSS を使用するだけで、コーナーカット + ボーダー + 投影 + コンテンツの背景色のグラデーシ...

3つの主要データベース(Mysql、SqlServer、Oracle)の違いについて簡単に説明します。

マイグレーションアドバンテージ:小型、高速、総所有コストが低い、オープンソース。複数のオペレーティン...

MySQL と接続関連のタイムアウトの詳細な概要

MySQL と接続関連のタイムアウト序文:今日、同僚から、データ量が多いときに MySQL データベ...

MySQLフィルタリングレプリケーションのアイデアの詳細な説明

目次mysql フィルター レプリケーションメインデータベースに実装ライブラリから実装いくつかの質問...

無効な Nginx クロスドメイン設定 Access-Control-Allow-Origin の解決策

nginx バージョン 1.11.3次の構成を使用すると、検証は無効になり、クロスドメインの問題が依...

Vue は zip ファイルのダウンロードを実装します

この記事の例では、Vueの具体的なコードを共有し、zipファイルをダウンロードして参考にしています。...

Linux ファイアウォール設定の詳細な手順 (yum ウェアハウス設定に基づく)

序文この実験では、デバッグ用に2つの仮想マシン(CentOs6とRed Hat 6)を準備します。 ...

Mysql 主キー UUID と自動増分主キーの違いと利点と欠点

導入私はしばらくの間、postgresql データベースを使用していました。クラウドに移行した後、自...

uniapp プロジェクトの最適化方法と提案

目次1. 複雑なページデータ領域をコンポーネントにカプセル化する2. 大きな画像の使用を避ける3. ...

MySQL 8.0.13 解凍版のインストールと設定方法のグラフィックチュートリアル

1. インストール1. MySQLをダウンロードするダウンロードアドレス: リンクアドレスブラウザで...

hrefを使用すると、リンクをクリックするだけでページ上の特定の場所にジャンプできます。

ページ内の a タグをクリックした後、ページ内の対応する場所にジャンプするようにします。方法は非常に...

Vue で計算プロパティを使用する際の知識ポイントのまとめ

計算されたプロパティ場合によっては、テンプレートにロジックを詰め込みすぎると、テンプレートが重くなり...