1.什么是慢查询日志?
慢查询日志是MySQL提供的一种日志记录,用来记录响应时间超过阀值的SQL语句。
如果某条SQL语句运行时间超过long_query_time设定的值,就会被记录到慢查询日志中。
long_query_time的默认值为 10(10秒)
由他来查看哪些SQL超出了我们的最大忍耐时间值,
比如一条sql执行超过5秒钟,我们就算慢SQL,希望能 收集超过5秒的sql,结合之前explain进行全面分析
2.如何使用
默认情况下,MySQL 数据库没有开启慢查询日志,需要我们手动来设置这个参数
如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会将SQL语句写入日志,因此或多或少带来一定的性能影响。
SQL语句 说明
命令 | 详细解释 |
---|---|
SHOW VARIABLES LIKE ‘%slow_query_log%’ | 查看慢查询日志是否开启(默认OFF) |
set global slow_query_log=1 | 开启慢查询日志 |
set global slow_query_log=0 | 关闭慢查询日志 |
SHOW VARIABLES LIKE ‘long_query_time%’ | 查看慢查询设定阈值(默认10秒) |
set long_query_time=5 | 设定慢查询阈值为5秒 (单位:秒 ) |
注意:
set global slow_query_log=1开启慢查询日志,仅对当前数据库生效,MySQL重启后失效。
如果需要永久生效,则需要修改my.ini配置文件,在[mysqld]下增加 slow_query_log = 1、slow_query_log_file = mysql路径下\data\layman-slow.log、long_query_time = 5和log_output = FILE(和数据库查询的一致)
永久生效
[mysqld]
#开启慢查询
slow_query_log = 1
#设置日志路径
slow_query_log_file = mysql路径下\data\layman-slow.log
#设置慢查询阈值为5秒
long_query_time = 5
log_output = FILE
3.日志分析工具
生产环境中手工查找,分析日志,非常的耗费时间,因此MySQL提供了日志分析工具mysqldumpslow
帮助信息
--获取返回集最多的10条SQL
mysqldumpslow -s r -t 10mysql路径下\data\layman-slow.log
--获取访问次数最多的10条SQL
mysqldumpslow -s c -t 10 mysql路径下\data\layman-slow.log
--获取按时间排序的前10条含有LEFT JOIN的SQL语句
mysqldumpslow -s t -t 10 -g "LEFT JOIN" mysql路径下\data\layman-slow.log
--结合|more使用,否则有可能会爆屏
mysqldumpslow -s r -t 10 mysql路径下\data\layman-slow.log |more
附加:
慢查询肯定需要大量数据做测试,但是我们又不能一条一条的手动添加,所以我们可以借助mysql里的函数和存储过程批量添加数据。
函数和存储过程
创建随机字符串函数
创建存储过程,调用上面的字符串随机函数,插入员工表
创建存储过程,调用上面的字符串随机函数,插入部门表
添加50万数据
数据添加完成。