本番のアプリが MySQL を使っていることが前提。pt-query-digest を使う
wget https://www.percona.com/downloads/percona-toolkit/3.0.10/binary/debian/xenial/x86_64/percona-toolkit_3.0.10-1.xenial_amd64.deb
sudo apt-get install libdbd-mysql-perl libdbi-perl libio-socket-ssl-perl libnet-ssleay-perl libterm-readkey-perl
sudo dpkg -i percona-toolkit_3.0.10-1.xenial_amd64.deb
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
# 以下を追加
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 0
sudo systemctl restart mysql
# 変更が読み込まれているかの確認
sudo mysql
mysql> show variables like 'slow%';
ログが一つのファイルに積み上がる形式のため、視認性のためにログローテする
now=`date +%Y%m%d-%H%M%S` && sudo mv /var/log/mysql/mysql-slow.log /var/log/mysql/mysql-slow.log.$now && sudo mysqladmin flush-logs
方法なりは、過去問や本戦の README を参照
# スロークエリログ解析
sudo pt-query-digest /var/log/mysql/mysql-slow.log
# ログの中身が大きい時は、lessでパイプする
sudo pt-query-digest /var/log/mysql/mysql-slow.log | less
ADMIN PREPARE がボトルネックに上がってきた時は、&interpolateParams=true
を追加。
参考