pt-query-digest 명령어를 이용한 MySQL Slow Query Log 분석 방법

MySQL은 튜닝 대상 SQL을 수집하기 위해 Slow Query Log 기능을 제공합니다. (설정 방법은 여기 참조)

Slow Query Log는 파일 및 테이블에 기록이 가능합니다만, 아마 운영 환경에서는 관리 문제로 인해서 주로 파일에 기록할 것으로 보입니다. 이렇게 파일에 기록된 Slow Query Log를 눈으로 확인하는 것은 매우 힘든데요.

percona 툴킷에서 제공하는 pt-query-digest 명령어를 이용하면 이러한 작업을 매우 효율적으로 수행할 수 있습니다. 뿐만 아니라 Literal SQL (띄어쓰기가 다르거나 심지어 대소문자가 달라도)을 하나의 SQL로 묶어서 리포트를 해주므로 분석 시에 매우 유용할 것 같습니다.

아래와 같이 Literal SQL, 띄어쓰기, 대소문자가 다른 SQL을 각각 수행 (총 4번 수행)


select * from  (select c1 from t1 where c1=1 group by c1) a, t2 b where a.c1=b.c1;
select * from  (select c1 from t1 where c1=2 group by c1) a, t2 b where a.c1=b.c1;
SELECT * FROM (SELECT c1 FROM t1 WHERE c1=2 GROUP BY c1) a, t2 b WHERE a.c1=b.c1;
SELECT * FROM        (SELECT c1 FROM t1 WHERE c1=2 GROUP BY c1) a, t2 b WHERE a.c1=b.c1;

pt-query_digest로 분석 수행


$ pt-query-digest /var/log/mysql/mysql-slow.log

아래의 결과에서 보는것과 같이, Overall:4, Count:4 입니다. 즉, 위의 4개의 SQL이 1개로 Grouping되서 리포트되는 것을 알 수 있습니다.

# Overall: 4 total, 1 unique, 0.04 QPS, 0.06x concurrency ________________
# Time range: 2017-04-12T21:32:24 to 2017-04-12T21:34:08
# Attribute          total     min     max     avg     95%  stddev  median
# ============     ======= ======= ======= ======= ======= ======= =======
# Exec time             6s      1s      2s      2s      2s    31ms      2s
# Lock time          481us   108us   149us   120us   144us    16us   108us
# Rows sent            385       1     128   96.25  124.25   53.37  124.25
# Rows examine      16.76M   4.19M   4.19M   4.19M   4.06M       0   4.06M
# Query size           330      80      88   82.50   84.10    2.76   80.10

# Attribute    pct   total     min     max     avg     95%  stddev  median
# ============ === ======= ======= ======= ======= ======= ======= =======
# Count        100       4
# Exec time    100      6s      1s      2s      2s      2s    31ms      2s
# Lock time    100   481us   108us   149us   120us   144us    16us   108us
# Rows sent    100     385       1     128   96.25  124.25   53.37  124.25
# Rows examine 100  16.76M   4.19M   4.19M   4.19M   4.06M       0   4.06M
# Query size   100     330      80      88   82.50   84.10    2.76   80.10
# String:
# Hosts        localhost
# Users        root
# Query_time distribution
#   1us
#  10us
# 100us
#   1ms
#  10ms
# 100ms
#    1s  ################################################################
#  10s+
# Tables
#    SHOW TABLE STATUS LIKE 't1'\G
#    SHOW CREATE TABLE `t1`\G
# EXPLAIN /*!50100 PARTITIONS*/
select * from  (select c1 from t1 where c1=2 group by c1) a, t2 b where a.c1=b.c1\G
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s