共计 2339 个字符,预计需要花费 6 分钟才能阅读完成。
这篇文章主要介绍“MYSQL 慢查询日志的查看方式”,在日常操作中,相信很多人在 MYSQL 慢查询日志的查看方式问题上存在疑惑,丸趣 TV 小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MYSQL 慢查询日志的查看方式”的疑惑有所帮助!接下来,请跟着丸趣 TV 小编一起来学习吧!
前言:mysql 的慢查询日志是数据库调优的一个主要依据,但是跟踪出来的文件是一个文本文件,查看起来费时费力,mysql 也提供了一个工具便于从文本文件里面查找的工具 mysqldumpslow。
Mysqldumpslow 是安装数据库时会自带的一个软件,在目录 /usr/local/mysql/bin 下面
[root@mysql01 data]# /usr/local/mysql/bin/mysqldumpslow –help
Usage: mysqldumpslow [OPTS…] [LOGS…]
Parse and summarize the MySQL slow query log. Options are
–verbose verbose
–debug debug
–help write this text to standard output
-v verbose
-d debug
-s ORDER what to sort by (al, at, ar, c, l, r, t), at is default // 表示排序的类型
al: average lock time // 按平均锁定时间排序
ar: average rows sent // 平均获取行数排序
at: average query time // 平均查询时间排序
c: count // 执行次数
l: lock time // 锁定时间
r: rows sent // 获取行数排序
t: query time // 查询时间
-r reverse the sort order (largest last instead of first) // 从小到大排序
-t NUM just show the top n queries // 查询结果的条目,后面跟数字
-a don t abstract all numbers to N and strings to S
-n NUM abstract numbers with at least n digits within names
-g PATTERN grep: only consider stmts that include this string // 包含特定的字符或字符串
-h HOSTNAME hostname of db server for *-slow.log filename (can be wildcard),
default is * , i.e. match all
-i NAME name of server instance (if using mysql.server startup script)
-l don t subtract lock time from total time
[root@mysql01 data]# /usr/local/mysql/bin/mysqldumpslow -s c -t 10 /data/JOEONE-IPOSDS-01-slow.log
查看访问次数最多的 10 个 sql 语句;
l [root@mysql01 data]# /usr/local/mysql/bin/mysqldumpslow -s r -t 10 /data/JOEONE-IPOSDS-01-slow.log
查看返回记录集最多的 10 个 sql 语句
l [root@mysql01 data]# /usr/local/mysql/bin/mysqldumpslow -t 10 -s t -g left join /data/JOEONE-IPOSDS-01-slow.log
查看使用 left join 的语句
Count: 132 Time=4.21s (555s) Lock=0.00s (0s) Rows=0.4 (53), ipos[ipos]@3hosts
执行次数 平均执行时间 / 总共执行时间 平均等待锁时间 / 总等待锁时间 平均获取行数 / 总获取行数 用户
详细的 SQL 语句
SELECT cus.zjhfrq,cus.zjrq,cus.headphoto,cus.sr1,cus.sr2,cus.vip,cus.xb,cus.Id,cus.gkdm,cus.gkmc,cus.sj,cus.dh,cus.dz,cus.bz,cus.scdh,cus.sy,cus.lylx,cus.cdbh,cus.jdrq,cus.zd_id,kh.khmc as zdmc, dj.khmc as djzdmc,cus.xfje,cus.dj_zd
FROM ipos_customer cus LEFT JOIN com_base_kehu kh ON kh.Id=cus.zd_id LEFT JOIN com_base_kehu dj ON dj.Id=cus.dj_zd WHERE N=N and (((cus.zd_id= S OR cus.dj_zd= S) and cus.vip=N) or ((cus.zd_id= S OR cus.dj_zd= S) and cus.vip=N)) and cus.sj like S and N=N and N=N order by cus.gkdm DESC LIMIT N
初步感觉这个语句是可以优化的;
总结:今天又看了公司的数据库通过慢查询日志把一条运行 10S 的语句优化成 0.1S 的语句,心情倍感高兴;但这只是万里长征的第一步,毕竟当一个数据库运行到领导要 DBA 来优化的地步,说明已经有很多的 SQL 语句有性能问题了,所以路还长着了。
到此,关于“MYSQL 慢查询日志的查看方式”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注丸趣 TV 网站,丸趣 TV 小编会继续努力为大家带来更多实用的文章!