slow query log

来源:互联网 发布:java.net.encode 编辑:程序博客网 时间:2024/04/27 23:25

原创文章,拒绝转载.


slow query log

慢查询日志. 

作用:

设定时间阀值,记录执行超过此值的sql到文件,查执行慢的sql用的

5.5之前是秒为单位,之后可以精确到微秒(microseconds),记录在table里精确到秒

 

记录的sql:

执行成功的,并且释放了锁资源的语句为结束

query cache的sql不记录

记录的时间:

是从获取到了锁真正开始执行的时间到上面语句真正结束的时间.分配锁资源的时间不计算在内.

因此sql的执行时间和实际记录的时间顺序会不同

 

开启:

默认禁用的

slow_query_log

默认0关闭慢查询功能

可以服务运行时修改

set global slow_query_log='on';  或者1开启

slow_query_log_file

日志文件名称及路径.默认data目录 /[hostname]-slow.log

 

参数

1.long_query_time

默认10秒,设定执行时间的阀值.超过此执行时间记录.

超过设定值,mysql> showstatus like 'Slow_queries';增加

2.min_examined_row_limit

默认0,都记录.语句检索到的行数小于设定值的语句不记录.

这个参数的意义是语句执行时所检查的所有行数,并非返回的记录数或者最终处理的记录数,例如update t1 set table_name='emp'; 虽然最终可能只处理了1行数据,但是实际上却是全表扫描了几百万行数据.

cat /var/lib/mysql/se15-slow.log 就能看出来.

Rows_examined: 3141632  实际上扫描了300万行的数据

3.log_slow_admin_statements

是否记录管理语句,ALTERTABLE,ANALYZE TABLE,CHECK TABLE, CREATE INDEX, DROP INDEX, OPTIMIZE TABLE, andREPAIR TABLE.

4.log_queries_not_using_indexes

是否将未使用索引的sql记录,默认off.此参数和long_query_time是或的关系,就算sql没走索引,但是超过时间阀值,会记录.但此参数如果打开了,任何语句没走索引的,就算没超时间阀值,也都会记录,会非常巨大.谨慎开启.

5.log_throttle_queries_not_using_indexes

与上面参数配合,控制每分钟记录的条数,默认是0.没限制

log_slow_slave_statements 记录复制环境下的语句,这个是在slave端的,记录应用进程的sql.

 

是否记录日志的判断顺序是 3,(1or4),2,5

-----------------------------------------------------------

mysqldumpslow

作用是把日志总结下呈现出来.其实就是个文本的,cat就能看

shell>mysqldumpslow [options] [log_file ...]

[root@se15~]# mysqldumpslow /var/lib/mysql/se15-slow.log

不带参数,默认把类似语句group到一起了,string类型显示为'S',number显示为N

默认是按照group的sql语句的平均执行时间降序排列

参数

-a 语句不group,并且显示实际的查询值

-s 怎么排序,默认按照执行时间递减

t 总时间排序

mysqldumpslow-s t se15-slow.log

at 平均时间

l 总的锁定时间

al 平均锁定时间

s 总的记录行数

as 平均记录行数

c 执行次数,默认排序

-r 按照规则排完了序再倒序排

-t 控制语句的输出数量.只显示group后的前n条记录.

[root@se15mysql]# mysqldumpslow -t 2 se15-slow.log

0 0
原创粉丝点击