关于MySQL的慢查询日志

关于MySQL 的慢查询日志
   在进行 SQL 优化时 , 要重点找出执行速度较慢或占系统资源较多的语句 . 通过开启 MySQL 的慢查询日志可以做到这一点 .
(1) 如何开启 MySQL 的慢查询日志
在配置文件 my.cnf 中添加以下参数 :
log-slow-queries=/opt/log/slow.log
long_query_time=2
注意参数不要写错了 , 否则慢查询日志是开启不了的 .
参数解释 :
    log-slow-queries 为记录慢查询的位置和文件名称,注意 mysql 用户在 /opt/log 下有可写权限才行。如果后面的值为空,则 MySQL Server 会给慢查询日志赋予主机名,并被放在 mysql 默认的数据目录下。
    long_query_time 为执行时间的上限,即超过这个设置时间的 SQL 定义为慢查询并被记录,默认值为 10s
上述两个参数加入后,要重启 MySQL Server 才会生效。
(2) 参数 log-queries-not-using-indexes
如果设置了参数 log-queries-not-using-indexes ,那么所有没有使用索引的查询也将被记录。在文件 my.cnf my.ini 中加入这一行可以记录这些查询 . 这是一个有用的日志。它对于性能的影响不大(假设所有查询都很快),并且强调了那些最需要注意的查询(丢失了索引或索引没有得到最佳应用)
(3) 慢查询日志分析工具 mysqldumpslow
Mysqldumpslow 主要的参数有以下几个:
-s :列出 SQL 的排列顺序标准,后面可以有这么几个:
t   总执行时间
c   执行的总次数
l  lock 的时间
r  返回的记录数
-t ,是 top n 的意思,即为返回前面多少条的 SQL
-g
,后边可以写一个正则匹配模式,大小写不敏感
-r ,该工具默认的排序顺序是降序 , -r 表示升序排序
-a,  don't abstract all numbers to N and strings to 'S' --- 默认情况下 , where 语句中等号右边的数字和字符串是被抽象成 N 或者 S . 这非常必要 . 因为我们要分析的是一类 SQL, 找出它们的共性来分析 , 而不是具体的针对某一条 SQL 语句 .
 
例子:
mysqldumpslow -s c -t 20 localhost-slow.log > result.sql
返回访问次数最多的 20 SQL 语句
mysqldumpslow -s r -t 20 localhost-slow.log > result.sql
返回记录集最多的 20 SQL 语句 > result.sql
mysqldumpslow -t 10 -s t -g “left join” localhost-slow.log
这个是按照查询时间返回前 10 条里面含有左连接的 SQL 语句
 
慢查询分析是个长期工作,即便系统长时间没有引入新的 SQL 查询,也可能由于不断更新数据使得数据分布特征发生变化,从而导致执行计划发生变化,进而产生慢查询。这里可以个人认为可以编写一定的 shell ,定时去分析过滤慢查询日志,这样工作就轻松多了。

你可能感兴趣的:(mysql)