MySQL慢日志分析慢SQL
慢日志
-
MySQL的慢查询日志是MySQL提供一种日志记录,它用来记录MySQL中响应时间超过阈值的语句具体指运行时间超过long_query_time值的SQL,则会被记录到慢日志中
具体指运行时间超过long_query_time值得SQL,则会被记录到慢查询日志中,long_query_time值默认为10,意思是运行10秒以上的语句。
-
由他来查看哪些SQL超出了我们最大忍耐时间值,比如一条sql执行超过5秒钟,我们就算慢SQL,希望能收集超过5秒sql,结合之前explain进行全面分析。
-
默认情况下,MySQL没有开启慢日志,需要手动设置这个参数。当然如果不是调优需要,一般不建议启动参数,因为开启慢日志会或多或少带来一定性能影响,慢查询日志支持将日志记录写入文件。
-
查看是否开启慢日志:默认情况下slow_query_log关闭的
show variables like "%slow_query_log%";
-
开启慢日志:
1.终端开启: set global slow_query_log=1; 但是这样开启,只是只对当前数据库生效,重启数据库MySQL 则会失效 2.永久启动慢日志: 修改配置文件:my.cnf [mysqld]下增加或修改参数: slow_query_log=1 slow_query_log_file=/var/lib/mysql/{host_name}-slow.log
-
-
查看慢日志记录的阈值:默认long_query_time =10秒
show variables like 'long_query_time%';
-
修改阀值:
1.终端修改: # 更改阀值为3秒 set global long_query_time=3; 需要注意的是,设置完慢sql的阀值,需要关闭窗口,重新进入窗口,输入下面命令查看是否成功设置: show global variables like "long_query_time"; 2.永久配置慢日志阈值: slow_query_log=1; slow_query_log_file=路径 long_query_time=3; log_output=FILE
-
-
慢日志文件记录:
-
先模拟一条查询的慢SQL语句:
select sleep(4);
-
进入慢日志查看:
Query_time 执行时间 use 当前库 SET timestamp 当前时间戳 导致问题sql语句
-
查看慢日志条数:
show global status like 'Slow_queries%';
-
mysqldumpslow 日志分析工具
-
在生产环境中,如果手工分析日志,查找,分析SQL,显然是个体力活,MySQL提供了日志分析工具mysqldumpslow
-
这里在lInux系统操作:我们先看看mysqldumpslow给我们提供了什么方法
[root@VM_0_2_centos ~]# mysqldumpslow --help 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, ae, c, l, r, e, 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
-
常用方法:
s:表示按照何种方式排序 c: 访问次数 l: 锁定时间 r: 返回记录 t: 查询时间 al: 平均锁定时间 ar: 平均返回记录数 at: 平均查询时间 t: 即为返回前面多少条数据 g: 后边搭配一个正则匹配模式,大小写不敏感的
-
案例:
# 得到返回记录集最多的10个SQL mysqldumpslow -s r -t 10 /var/lib/mysql/VM_0_2_centos-slow.log # 得到访问次数最多的10个SQL mysqldumpslow -s c -t 10 /var/lib/mysql/VM_0_2_centos-slow.log # 得到按照时间排序的前10条里面含有左连接的查询语句 mysqldumpslow -s t -t 10 -g "left join" /var/lib/mysql/VM_0_2_centos-slow.log # 另外建议在使用这些命令时结合 | 和 more 使用,否则有可能出现爆屏现象 mysqldumpslow -s r -t 10 /var/lib/mysql/VM_0_2_centos-slow.log | more
分类:
MySQL
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库