テックブログ

スロークエリログ解析ツール「pt-query-digest」を使ってみよう!

こんにちは、mtokです。

先日スロークエリログについて投稿しましたので、
今回はスロークエリログの解析ツール「pt-query-digest」をご紹介します。

pt-query-digestとは

pt-query-digestは、スロークエリログを解析し、ボトルネックとなるクエリを特定するためのツールです。
最も実行時間が長いクエリを見つけ出したり、パフォーマンス改善に役立ちます。

ISUCONでも活用されている、強力なツールです!

pt-query-digestのインストール

RHELのサーバでは、次のコマンドを使用してインストールします。

# yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm

# percona-release setup
※エラーが出たら # percona-release setup pt

# yum install percona-toolkit

pt-query-digestを実行する

pt-query-digestはコマンドラインから実行することができます。
別ファイルに出力して使用するのが一般的です。

# pt-query-digest /var/log/mysql/slow-query.log > output.txt

期間を指定することもできます。

# pt-query-digest –since=”2023-07-16″ –until=”2023-07-17″ /var/log/mysql/slow-query.log > output.txt

pt-query-digestの出力の読み解き方

pt-query-digestの出力(output.txt)はいくつかのセクションに分かれています。
クエリパターンを識別し、実行時間や頻度をまとめます。

# 280ms user time, 40ms system time, 32.53M rss, 103.77M vsz
# Current date: Sun Jan 1 00:00:00 2023
# Hostname: localhost
# Files: slow-query.log
# Overall: 6 total, 2 unique, 0.03 QPS, 0.01x concurrency ___________
# Time range: 2023-01-01 00:00:00 to 01:00:00
# Attribute total min max avg 95% stddev median
# ============ ======= ======= ======= ======= ======= ======= =======
# Exec time 24s 3s 6s 4s 6s 2s 3s
# Lock time 0 0s 0s 0s 0s 0s 0s
# Rows sent 6 1 1 1 1 0 1
# Rows examined 30 10 20 15 20 7 15
# Query size 168B 28B 28B 28B 28B 0 28B

# Profile
# Rank Query ID Response time Calls R/Call V/M Item
# ==== ================== ============= ===== ====== ===== ====
# 1 0xE20BB2DFDD20BD5B 18.0000 75.0% 3 6.0000 0.00 SELECT table_name
# 2 0xB50EF9C6A6C377C3 6.0000 25.0% 3 2.0000 0.00 SELECT another_table

# Query 1: 0.01 QPS, 0x concurrency, ID 0xE20BB2DFDD20BD5B at byte 64 __
# Scores: V/M = 0.00
# Time range: 2023-01-01 00:00:00 to 00:03:00
# Attribute pct total min max avg 95% stddev median
# ============ === ======= ======= ======= ======= ======= ======= =======
# Count 50 3
# Exec time 75 18s 6s 6s 6s 6s 0s 6s
# Lock time 0 0 0s 0s 0s 0s 0s 0s
# Rows sent 50 3 1 1 1 1 0 1
# Rows examined 60 20 10 10 10 10 0 10
# Query size 50 84B 28B 28B 28B 28B 0 28B
# String:
# Databases db
# Hosts localhost
# Users user
# Query_time distribution
# 1us
# 10us
# 100us
# 1ms
# 10ms
# 100ms
# 1s
# 10s ################################################################
# 10s+
# Tables
# SHOW TABLE STATUS LIKE ‘table_name’\G
# SHOW CREATE TABLE `table_name`\G
# EXPLAIN /*!50100 PARTITIONS*/
SELECT * FROM table_name\G

上から順番に
「全体のパフォーマンス」
「クエリのランキング」
「クエリの詳細」

のセッションが出力されています。

ランキング上位のクエリがボトルネックになっていると思われるので
クエリの詳細より内容を確認し、改善することでパフォーマンスが向上につながります。

最後にはEXPLAINセッションが書かれていて、
インデックスの利用やテーブルスキャンの有無などを確認するためのヒントも提示してくれます。

まとめ

クエリの最適化が必要な場合やデータベースの問題を特定したい場合は
pt-query-digestをぜひ使ってみてください!

それではまた。

この記事をシェアする

  • facebook
  • twitter
  • hatena
  • line
URLとタイトルをコピーする

実績数30,000件!
サーバーやネットワークなど
ITインフラのことならネットアシストへ、
お気軽にご相談ください