一.慢查询日志的作用什么?
顾名思义,他可以帮我们定位那些执行时间很长的查询(bad sql)。
通常情况下,如果我们优化了TOP 10(最昂贵的10个查询),我们可以很显而易见的看到Mysql性能整体的提升。
以前在医疗行业做的时候(sqlserver数据库),也是通过一些系统视图/函数等查询到耗CPU/IO最多的那些SQL,优化他们后,HIS系统整体性能的提升是非常可观的。
二.开启慢查询日志的开启以及设置阈值
1.我们可以通过以下命令查看慢查询日志是否开启。
show variables like '%slow_query_log%'; # 我这是默认开启的。
2.OFF就是关掉了的意思。我们可以通过set global slow_query_log = ON;将他重新打开。下面那个slow_query_log_file就是慢查询日志所在的地方。
3.设置long_query_time的阈值。
所有执行时间超过long_query_time设定的秒数的SQL语句都会被记录到慢查询日志里。
我这里设置了1秒是用作演示的,具体应该根据业务系统的实即情况去设置阈值。
三.玩一下+官方分析工具mysqldumpslow入门
1.手动造一个2.52sec的查询,超过了我刚刚设置的阈值(1s)了。
2.查看慢查询日志(这边的路径就是前面参数slow_query_log_file的路径)。
□ Time:执行SQL的开始时间。这里是2021-04-05 06:49
□ User@Host:执行查询的用户和客户端IP。
□ Query_time:查询耗时。
□ Rows_sent:返回了多少行记录(结果集)。
□ Rows_examined:检查了多少条记录。
3.使用mysqldumpslow工具分析慢查询日志。
当我们的慢查询日志很多的时候我们不可能通过cat这种命令直接去查,所以我们可以通过mysqldumpslow命令(官方自带)进行更快速的分析,并且定位哪些慢SQL。
1.访问时间最长的10个sql语句的命令如下。
我在这边查询了3次我的示例表。
□ Count:执行的次数。
□ Time :时间。(括号里面那个是总的时间)
2.访问次数最多的10个sql语句的命令如下。(就是按照count排序)
四.第三方分析工具pt-query-digest
他比起mysqldumpslow更友好更强大,感兴趣的朋友可以自己研究。