(1)、如何开启mysql的慢查询日志
在配置文件my.cnf中添加以下参数:
注意参数不要写错了,否则慢查询日志是开启不了的.
参数解释:
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语句.
例子:
返回访问次数最多的20个SQL语句
返回记录集最多的20个SQL语句> result.sql
这个是按照查询时间返回前10条里面含有左连接的SQL语句
慢查询分析是个长期工作,即便系统长时间没有引入新的SQL查询,也可能由于不断更新数据使得数据分布特征发生变化,从而导致执行计划发生变化,进而产生慢查询。
可以编写一定的shell,定时去分析过滤慢查询日志。