mysql性能分析工具

explain

type:访问类型,结果值从好到坏依次是:system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL,一般来说,至少达到range级别,最好能达到ref。

key:实际使用的索引,如果为NULL,则没有使用索引。很少的情况下,MYSQL会选择优化不足的索引。这种情况下,可以在SELECT语句中使用USE INDEX(indexname)来强制使用一个索引或者用IGNORE INDEX(indexname)来强制MYSQL忽略索引。

ref:显示索引的哪一列被使用了。

Extra:额外信息,坏的例子是Using temporary和Using filesort,意思MYSQL根本不能使用索引。

参考:【MySQL优化】——看懂explain_漫漫长途,终有回转;余味苦涩,终有回甘-CSDN博客_explain

mysqldumpslow

-s 按照那种方式排序  c:访问计数  t:查询时间  l:锁定时间  r:返回记录  al:平均锁定时间  ar:平均访问记录数  at:平均查询时间

-t 是top n的意思,返回多少条数据。

-g 可以跟上正则匹配模式,大小写不敏感。

mysqldumpslow -s c -t 20 host-slow.log   (访问次数最多的20个sql)

mysqldumpslow -s r -t 20 host-slow.log   (返回记录集最多的20个sql)

mysqldumpslow -t 10 -s t -g “left join” host-slow.log  (返回照查询时间最长且含有左连接前10个sql)

profile

profile可以对每一条sql的性能进行分析,但mysql5.7之后将被废弃,推荐使用performance schema。

是否开启: show variables like '%profiling%';  或  SELECT @@profiling;

开启: set profiling=1;

mysql性能分析工具_第1张图片

分析:

show profiles; 

show profile for query 2; 

show profile cpu,block io,memory,swaps for query 2;

grep、awk

grep -E 'select' 201905_slow.log | awk -F 'from|where' '{print $2}' | awk '!a[$0]++' > 201905_table.txt    慢查询表名列表

grep 'wx_user' 201905_slow.log | wc -l    某表的慢查询次数

grep -B 2 'wx_user' 201905_slow.log | grep -E '# Query_time:' | awk -F ' ' '{print $3}' | awk '{sum+=$1} END {print sum}'  某表的慢查询总时长

你可能感兴趣的:(mysql,mysql,数据库,sql)