记录运行较慢的SQL语句的日志,定位低效SQL语句的工具日志
开启慢日志(默认没开启)
开关: slow_query_log=1 文件位置及名字 slow_query_log_file=/data/mysql/slow.log 设定慢查询时间: long_query_time=0.1 没走索引的语句也记录: log_queries_not_using_indexes vim /etc/my.cnf slow_query_log=1 是否开启 slow_query_log_file=/data/mysql/slow.log 文件存放位置 long_query_time=0.1 满语句认定时间阈值 log_queries_not_using_indexes=1 不走索引的语句记录 systemctl restart mysqld
mysqldumpslow 分析慢日志
1.模拟满语句(t_100w表) select * from t_100w limit 500000,10; select * from t_100w limit 600000,10; select * from t_100w limit 600000,10; select * from t_100w limit 600000,10; select * from t_100w limit 600000,10; 2.分析 mysqldumpslow -s c -t 10 /data/mysql/slow.log -s排序条件 c次数 t表示top 3.第三方工具 mysqldumpslow pt-query-digest Anemometer基于pt-query-digest将MySQL慢查询可视化 https://www.percona.com/downloads/percona-toolkit/LATEST/ yum install perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL perl-Digest-MD5 toolkit工具包中的命令: ./pt-query-diagest /data/mysql/slow.log
抓到慢日志处理思路
DQL语句-select语句: 分析执行计划,索引和语句 应急性对的show full processlist; 间歇性slow_log DDL: 应急性show full processlist;看MDL,kill id 说明kill操作无法快速kill,怎么办? 使用pt-kill工具 processid-->SQL id-->OS id-->os kill