안녕하세요 이번글에서는 Mysql or Mariadb에서 쿼리 실행 시간이 설정된 시간 이상으로 걸릴 시 slow query log가 남게됩니다. 하지만 가시성 가독성이 떨어지기 때문에 Percona에서 만든 툴을 이용하여 분석하기 편하게 변환하도록 하겠습니다.
pt-query-digest
pt-summary
pt-online-schema-change
Download Percona Toolkit
Version: -- Select Version -- Percona Toolkit 3.3.1 Percona Toolkit 3.3.0 Percona Toolkit 3.2.1 Percona Toolkit 3.2.0 Percona Toolkit 3.1.0 Percona Toolkit 3.1 Percona Toolkit 3.0.13 Percona Toolkit 3.0.12 Percona Toolkit 3.0.11 Percona Toolkit 3.0.10 Perc
www.percona.com
## Perl 패키지 설치
[root@localhost]# yum install perl-DBI perl-DBD-MySQL perl-TermReadKey perl perl-IO-Socket-SSL perl-Time-HiRes perl-devel
...(생략)
Installed:
perl-DBD-MySQL.x86_64 0:4.023-6.el7 perl-DBI.x86_64 0:1.627-4.el7 perl-IO-Socket-SSL.noarch 0:1.94-7.el7 perl-devel.x86_64 4:5.16.3-299.el7_9
Dependency Installed:
gdbm-devel.x86_64 0:1.10-8.el7 glibc-devel.x86_64 0:2.17-325.el7_9 glibc-headers.x86_64 0:2.17-325.el7_9 kernel-headers.x86_64 0:3.10.0-1160.59.1.el7
libdb-devel.x86_64 0:5.3.21-25.el7 perl-Compress-Raw-Bzip2.x86_64 0:2.061-3.el7 perl-Compress-Raw-Zlib.x86_64 1:2.061-4.el7 perl-Data-Dumper.x86_64 0:2.145-3.el7
perl-ExtUtils-Install.noarch 0:1.58-299.el7_9 perl-ExtUtils-MakeMaker.noarch 0:6.68-3.el7 perl-ExtUtils-Manifest.noarch 0:1.61-244.el7 perl-ExtUtils-ParseXS.noarch 1:3.18-3.el7
perl-IO-Compress.noarch 0:2.061-2.el7 perl-IO-Socket-IP.noarch 0:0.21-5.el7 perl-Mozilla-CA.noarch 0:20130114-5.el7 perl-Net-Daemon.noarch 0:0.48-5.el7
perl-Net-LibIDN.x86_64 0:0.12-15.el7 perl-Net-SSLeay.x86_64 0:1.55-6.el7 perl-PlRPC.noarch 0:0.2020-14.el7 perl-Test-Harness.noarch 0:3.28-3.el7
systemtap-sdt-devel.x86_64 0:4.0-13.el7
Updated:
perl.x86_64 4:5.16.3-299.el7_9
Dependency Updated:
glibc.x86_64 0:2.17-325.el7_9 glibc-common.x86_64 0:2.17-325.el7_9 libdb.x86_64 0:5.3.21-25.el7 libdb-utils.x86_64 0:5.3.21-25.el7 perl-libs.x86_64 4:5.16.3-299.el7_9
Complete!
## percona-toolkit 설치
[root@localhost ~]# wget https://www.percona.com/downloads/percona-toolkit/3.0.5/binary/tarball/percona-toolkit-3.0.5_x86_64.tar.gz
--2022-03-11 09:28:58-- https://www.percona.com/downloads/percona-toolkit/3.0.5/binary/tarball/percona-toolkit-3.0.5_x86_64.tar.gz
Resolving www.percona.com (www.percona.com)... 172.67.8.157, 104.22.9.28, 104.22.8.28, ...
Connecting to www.percona.com (www.percona.com)|172.67.8.157|:443... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://downloads.percona.com/downloads/percona-toolkit/3.0.5/binary/tarball/percona-toolkit-3.0.5_x86_64.tar.gz [following]
--2022-03-11 09:28:59-- https://downloads.percona.com/downloads/percona-toolkit/3.0.5/binary/tarball/percona-toolkit-3.0.5_x86_64.tar.gz
Resolving downloads.percona.com (downloads.percona.com)... 162.220.4.222, 162.220.4.221, 74.121.199.231
Connecting to downloads.percona.com (downloads.percona.com)|162.220.4.222|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 10232447 (9.8M) [application/x-gzip]
Saving to: ‘percona-toolkit-3.0.5_x86_64.tar.gz’
100%[===================================================================================================================================================>] 10,232,447 4.89MB/s in 2.0s
2022-03-11 09:29:02 (4.89 MB/s) - ‘percona-toolkit-3.0.5_x86_64.tar.gz’ saved [10232447/10232447]
[root@localhost ~]# tar -zxvf percona-toolkit-3.0.5_x86_64.tar.gz
percona-toolkit-3.0.5/
percona-toolkit-3.0.5/MANIFEST
percona-toolkit-3.0.5/COPYING
percona-toolkit-3.0.5/README.md
percona-toolkit-3.0.5/glide.lock
percona-toolkit-3.0.5/INSTALL
percona-toolkit-3.0.5/lib/
percona-toolkit-3.0.5/bin/
percona-toolkit-3.0.5/bin/pt-upgrade
percona-toolkit-3.0.5/bin/glide
percona-toolkit-3.0.5/bin/pt-fingerprint
percona-toolkit-3.0.5/bin/pt-heartbeat
percona-toolkit-3.0.5/bin/pt-mongodb-query-digest
percona-toolkit-3.0.5/bin/pt-pmp
percona-toolkit-3.0.5/bin/pt-fk-error-logger
percona-toolkit-3.0.5/bin/pt-mext
percona-toolkit-3.0.5/bin/pt-slave-find
percona-toolkit-3.0.5/bin/pt-summary
percona-toolkit-3.0.5/bin/pt-show-grants
percona-toolkit-3.0.5/bin/pt-variable-advisor
percona-toolkit-3.0.5/bin/pt-stalk
percona-toolkit-3.0.5/bin/pt-table-sync
percona-toolkit-3.0.5/bin/pt-slave-delay
percona-toolkit-3.0.5/bin/pt-sift
percona-toolkit-3.0.5/bin/pt-archiver
percona-toolkit-3.0.5/bin/pt-mysql-summary
percona-toolkit-3.0.5/bin/pt-table-checksum
percona-toolkit-3.0.5/bin/pt-kill
percona-toolkit-3.0.5/bin/pt-table-usage
percona-toolkit-3.0.5/bin/pt-config-diff
percona-toolkit-3.0.5/bin/pt-slave-restart
percona-toolkit-3.0.5/bin/pt-align
percona-toolkit-3.0.5/bin/pt-online-schema-change
percona-toolkit-3.0.5/bin/pt-fifo-split
percona-toolkit-3.0.5/bin/pt-index-usage
percona-toolkit-3.0.5/bin/pt-ioprofile
percona-toolkit-3.0.5/bin/pt-visual-explain
percona-toolkit-3.0.5/bin/pt-duplicate-key-checker
percona-toolkit-3.0.5/bin/pt-query-digest
percona-toolkit-3.0.5/bin/pt-mongodb-summary
percona-toolkit-3.0.5/bin/pt-find
percona-toolkit-3.0.5/bin/pt-deadlock-logger
percona-toolkit-3.0.5/bin/pt-diskstats
percona-toolkit-3.0.5/Changelog
percona-toolkit-3.0.5/CONTRIBUTE.md
percona-toolkit-3.0.5/Makefile.PL
percona-toolkit-3.0.5/glide.yaml
percona-toolkit-3.0.5/docs/
percona-toolkit-3.0.5/docs/percona-toolkit.pod
percona-toolkit-3.0.5/CONTRIBUTING.md
percona-toolkit-3.0.5/docker-compose.yml
[root@localhost ~]# cd percona-toolkit-3.0.5/
[root@localhost percona-toolkit-3.0.5]# perl ./Makefile.PL
Checking if your kit is complete...
Looks good
Writing Makefile for percona-toolkit
[root@localhost percona-toolkit-3.0.5]# make && make install
cp bin/pt-mysql-summary blib/script/pt-mysql-summary
/usr/bin/perl -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/pt-mysql-summary
cp bin/pt-mongodb-summary blib/script/pt-mongodb-summary
/usr/bin/perl -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/pt-mongodb-summary
cp bin/pt-kill blib/script/pt-kill
/usr/bin/perl -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/pt-kill
cp bin/pt-online-schema-change blib/script/pt-online-schema-change
/usr/bin/perl -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/pt-online-schema-change
cp bin/pt-table-sync blib/script/pt-table-sync
/usr/bin/perl -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/pt-table-sync
cp bin/pt-upgrade blib/script/pt-upgrade
/usr/bin/perl -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/pt-upgrade
cp bin/pt-table-usage blib/script/pt-table-usage
/usr/bin/perl -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/pt-table-usage
cp bin/pt-fifo-split blib/script/pt-fifo-split
/usr/bin/perl -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/pt-fifo-split
cp bin/pt-slave-find blib/script/pt-slave-find
/usr/bin/perl -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/pt-slave-find
cp bin/pt-ioprofile blib/script/pt-ioprofile
/usr/bin/perl -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/pt-ioprofile
cp bin/pt-find blib/script/pt-find
/usr/bin/perl -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/pt-find
cp bin/pt-archiver blib/script/pt-archiver
/usr/bin/perl -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/pt-archiver
cp bin/pt-deadlock-logger blib/script/pt-deadlock-logger
/usr/bin/perl -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/pt-deadlock-logger
cp bin/pt-fingerprint blib/script/pt-fingerprint
/usr/bin/perl -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/pt-fingerprint
cp bin/pt-mext blib/script/pt-mext
/usr/bin/perl -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/pt-mext
cp bin/pt-slave-restart blib/script/pt-slave-restart
/usr/bin/perl -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/pt-slave-restart
cp bin/pt-summary blib/script/pt-summary
/usr/bin/perl -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/pt-summary
cp bin/pt-fk-error-logger blib/script/pt-fk-error-logger
/usr/bin/perl -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/pt-fk-error-logger
cp bin/pt-table-checksum blib/script/pt-table-checksum
/usr/bin/perl -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/pt-table-checksum
cp bin/pt-query-digest blib/script/pt-query-digest
/usr/bin/perl -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/pt-query-digest
cp bin/slow.log blib/script/slow.log
/usr/bin/perl -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/slow.log
cp bin/pt-show-grants blib/script/pt-show-grants
...(중략)
Installing /usr/local/bin/pt-sift
Installing /usr/local/bin/glide
Installing /usr/local/bin/pt-diskstats
Installing /usr/local/bin/pt-visual-explain
Installing /usr/local/bin/pt-variable-advisor
Installing /usr/local/bin/pt-index-usage
Installing /usr/local/bin/pt-duplicate-key-checker
Installing /usr/local/bin/pt-config-diff
Installing /usr/local/bin/pt-stalk
Appending installation info to /usr/lib64/perl5/perllocal.pod
## slow query 분석 실행 -> 에러발생
(pt-query-digest {slow쿼리파일명} > {output 파일명})
[root@localhost bin]# ./pt-query-digest --type='slowlog' kim.slow.log > slow.log
Can't locate Digest/MD5.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at ./pt-query-digest line 2470.
BEGIN failed--compilation aborted at ./pt-query-digest line 2470.
※ perl-Digest-MD5 패키지 가 없기 때문에 에러발생 -> 설치 진행
## perl-Digest-MD5 설치
[root@localhost bin]# yum -y install perl-Digest-MD5
...
Total download size: 53 k
Installed size: 82 k
Downloading packages:
(1/2): perl-Digest-1.17-245.el7.noarch.rpm | 23 kB 00:00:00
(2/2): perl-Digest-MD5-2.52-3.el7.x86_64.rpm | 30 kB 00:00:00
---------------------------------------------------------------------------------------------
Total 226 kB/s | 53 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : perl-Digest-1.17-245.el7.noarch 1/2
Installing : perl-Digest-MD5-2.52-3.el7.x86_64 2/2
Verifying : perl-Digest-1.17-245.el7.noarch 1/2
Verifying : perl-Digest-MD5-2.52-3.el7.x86_64 2/2
Installed:
perl-Digest-MD5.x86_64 0:2.52-3.el7
Dependency Installed:
perl-Digest.noarch 0:1.17-245.el7
Complete!
## slow query 분석 재실행
## 분석할 slow query 를 해당 디렉토리로 옮깁니다
[root@localhost bin]# cp /root/kim.slow.log /root/percona-toolkit-3.0.5/bin/
[root@localhost bin]# ./pt-query-digest --type='slowlog' kim.slow.log > slow.log
kim.slow.log: 4% 10:04 remain
kim.slow.log: 9% 09:50 remain
kim.slow.log: 14% 09:01 remain
kim.slow.log: 19% 08:28 remain
kim.slow.log: 23% 07:56 remain
kim.slow.log: 28% 07:22 remain
kim.slow.log: 33% 06:48 remain
kim.slow.log: 38% 06:16 remain
kim.slow.log: 43% 05:44 remain
kim.slow.log: 48% 05:17 remain
kim.slow.log: 53% 04:46 remain
kim.slow.log: 58% 04:19 remain
kim.slow.log: 63% 03:46 remain
kim.slow.log: 67% 03:19 remain
kim.slow.log: 73% 02:46 remain
kim.slow.log: 78% 02:14 remain
kim.slow.log: 83% 01:43 remain
kim.slow.log: 87% 01:14 remain
kim.slow.log: 92% 00:44 remain
kim.slow.log: 97% 00:14 remain
## output으로 나온 파일을 local로 빼서 확인하면 아래와 같이 분석하기 편하게 Top slow query, 실행 시간 등 나옵니다.
'Others > Opensource Tool' 카테고리의 다른 글
[Ansible - Semaphore 설치] part 1 (0) | 2022.04.24 |
---|---|
[Ansible - AWX설치] (0) | 2022.04.24 |
[Ansible - MySQL 설치 & 배포] (0) | 2022.02.05 |
[Pacemaker & corosync 구성 Vip failover] (0) | 2022.01.20 |
[Redis - Sentinel 설정 & Failover test] part 2 (0) | 2022.01.20 |