共计 2380 个字符,预计需要花费 6 分钟才能阅读完成。
这篇文章主要介绍“Mysql 慢查询日志的过程”,在日常操作中,相信很多人在 Mysql 慢查询日志的过程问题上存在疑惑,丸趣 TV 小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Mysql 慢查询日志的过程”的疑惑有所帮助!接下来,请跟着丸趣 TV 小编一起来学习吧!
mysql 慢查询日志对于跟踪有问题的查询非常有用,可以分析出代码实现中耗费资源的 sql 语句,对我们程序的优化有很高的参考。本篇主要将慢查询日志的开启,日志分析,这也是优化 SQL 程序的一般步骤中至关重要的一步。
1.mysql 慢查询日志
打开 mysql 的慢查询日志很简单, 只需要在 mysql 的配置文件里(windows 系统是 my.ini,linux 系统是 my.cnf) 的[mysqld]下面加上
Java 代码
log-slow-queries=mysql_slow.log
long_query_time=3
其中 log-slow-queries 为日志的文件名,可以指定目录,如 log-slow- queries=D:\mysql_slow.log; long_query_time 为定义多长的查询我们定义为慢查询,并记录在 log-slow-queries 指定的文件中,在这里我们定义超过 3 秒的查询进行记录。
配置完成以后重启 Mysql 服务器,执行 show variables like %slow% 查看慢查询日志是否开启,如果 slow_query_log 和 log_slow_queries 显示为 on,那说明服务器的慢查询日志已
经开启了。如下显示:
Java 代码
mysql show variables like %slow%
+———————+—————-+
| Variable_name | Value |
+———————+—————-+
| log_slow_queries | ON |
| slow_launch_time | 2 |
| slow_query_log | ON |
| slow_query_log_file | mysql_slow.log |
+———————+—————-+
4 rows in set (0.00 sec)
slow_launch_time 跟慢查询日志没有任何关系, 它代表的是 thread create 的一个阈值,如果要看 long_query_time,可以用
Java 代码
mysql show variables like %long%
+—————–+———-+
| Variable_name | Value |
+—————–+———-+
| long_query_time | 3.000000 |
+—————–+———-+
1 row in set (0.00 sec)
2.mysql 慢查询日志分析
建表如下图,建表勿要给 text 加上索引,否则可能出现不了超过 3 秒的查询,数据表填充了 4194304 条数据。
我们来执行一个超过 3 秒的查询,如下:
Java 代码
mysql select * from wei where text= orange
+———+——–+
| id | text |
+———+——–+
| 4103519 | orange |
+———+——–+
1 row in set (3.79 sec)
再执行一个超过 3 秒的和一个没有超过 3 秒的:
Java 代码
mysql select * from wei where text= xishizhaohua
Empty set (3.82 sec)
Java 代码
[mysql select * from wei where id=4564;
+——+——————–+
| id | text |
+——+——————–+
| 4564 | yyyyyyyyyyyyyyyyyy |
+——+——————–+
1 row in set (0.02 sec)
可以通过下面的命令查看现在这个 session 有多少个慢查询:
现在我们可以查看 mysql_slow.log(win7 默认在 C:\ProgramData\MySQL\MySQL Server 5.1\data 下面),里边内容如下,内容比较明了,包括查询花费的语句及时间,还包括查询时的时间戳等信息,其中 Rows_examined 为检查的 行数,对我们优化也很有帮助
# Time: 121017 17:38:54
# User@Host: root[root] @ localhost [127.0.0.1]
# Query_time: 3.794217 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 4194304
SET timestamp=1350466734;
select * from wei where text= orange
# Time: 121017 17:46:22
# User@Host: root[root] @ localhost [127.0.0.1]
# Query_time: 3.819219 Lock_time: 0.000000 Rows_sent: 0 Rows_examined: 4194304
SET timestamp=1350467182;
select * from wei where text= xishizhaohua
到此,关于“Mysql 慢查询日志的过程”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注丸趣 TV 网站,丸趣 TV 小编会继续努力为大家带来更多实用的文章!