mita2 database life

主にMySQLに関するメモです

良く使う pt-query-digest のコマンド メモ

ただのメモです。

pt-query-digest

percona tookit に含まれるツールの1つ。 スロークエリログやtcpdump からクエリを抽出して、クエリを集計するツール。 負荷をかけているクエリを洗い出すのに便利なヤツ。

https://www.percona.com/doc/percona-toolkit/LATEST/pt-query-digest.html

いつものコマンド

  • InnoDB の IO の多い順でソート

InnoDB_IO_r_bytes は Vanilla MySQLでは出力されない。Percona でしか動かない。

$ pt-query-digest  --group-by fingerprint --order-by InnoDB_IO_r_bytes:sum --since 'YYYY-MM-DD HH:MM:SS' --until 'YYYY-MM-DD HH:MM:SS' mysqld-slow.log 
  • 実行時間の合計でソート

Query_time の合計でソート

$ pt-query-digest  --group-by fingerprint --order-by Query_time:sum  --since 'YYYY-MM-DD HH:MM:SS' --until 'YYYY-MM-DD HH:MM:SS' mysqld-slow.log 
  • たくさん行を読み取っているヤツ

Rows_examined の合計でソート

pt-query-digest  --group-by fingerprint --order-by Rows_examined:sum  --since 'YYYY-MM-DD HH:MM:SS' --until 'YYYY-MM-DD HH:MM:SS' mysqld-slow.log 
  • 回数でソート

〜:cnt とする。Query_time の部分は何でも良い。

pt-query-digest  --group-by fingerprint --order-by Query_time:cnt  --since 'YYYY-MM-DD HH:MM:SS' --until 'YYYY-MM-DD HH:MM:SS' mysqld-slow.log 

おまけ

MySQL 8 で FLUSH STATUS したら、Bytes_received やら Read_first がありえ無い大きな値でログが出力された。

# Time: 2020-04-18T13:38:45.798080+09:00
# User@Host: root[root] @ localhost []  Id:   162
# Query_time: 0.002119  Lock_time: 0.000000 Rows_sent: 0  Rows_examined: 0 Thread_id: 162 Errno: 0 Killed: 0 Bytes_received: 18446744073709551112 Bytes_sent: 18446744073709548672
 Read_first: 18446744073709551612 Read_last: 0 Read_key: 18446744073709551597 Read_next: 18446744073709551611 Read_prev: 0 Read_rnd: 0 Read_rnd_next: 18446744073709551609 Sort_me
rge_passes: 0 Sort_range_count: 0 Sort_rows: 18446744073709551608 Sort_scan_count: 18446744073709551613 Created_tmp_disk_tables: 0 Created_tmp_tables: 0 Start: 2020-04-18T13:38:4
5.795961+09:00 End: 2020-04-18T13:38:45.798080+09:00
SET timestamp=1587184725;
flush status;