一:查询 slow log 的状态,如示例代码所示,则 slow log 已经开启。
- mysql > show variables like '%slow%'; + ---------------------+------------------------------------------+|Variable_name | Value | +---------------------+------------------------------------------+|log_slow_queries | ON | |slow_launch_time | 2 | |slow_query_log | ON | |slow_query_log_file | /mysqllog/slow_log / slow_queries_3306.log | +---------------------+------------------------------------------+4 rows in set(0.00 sec)
如果没有开启慢查询日志有以下两种方法:
二:slow log 的日志相关参数详解
slow_query_log :是否开启慢查询日志,1 表示开启,0 表示关闭。
log-slow-queries :旧版(5.6 以下版本)MySQL 数据库慢查询日志存储路径。可以不设置该参数,系统则会默认给一个缺省的文件 host_name-slow.log
slow-query-log-file:新版(5.6 及以上版本)MySQL 数据库慢查询日志存储路径。可以不设置该参数,系统则会默认给一个缺省的文件 host_name-slow.log
long_query_time :慢查询阈值,当查询时间多于设定的阈值时,记录日志。
log_queries_not_using_indexes:未使用索引的查询也被记录到慢查询日志中(可选项)。
log_output:日志存储方式。log_output='FILE'表示将日志存入文件,默认值是'FILE'。log_output='TABLE'表示将日志存入数据库,这样日志信息就会被写入到 mysql.slow_log 表中。MySQL 数据库支持同时两种日志存储方式,配置的时候以逗号隔开即可,如:log_output='FILE,TABLE'。日志记录到系统的专用日志表中,要比记录到文件耗费更多的系统资源,因此对于需要启用慢查询日志,又需要能够获得更高的系统性能,那么建议优先记录到文件。
三:如何在线安全的清空慢查询日志
- mysql > set global slow_query_log = 0;
- Query OK,
- 0 rows affected(0.27 sec)
- mysql > show variables like '%slow%'; + ---------------------+------------------------------------------+|Variable_name | Value | +---------------------+------------------------------------------+|log_slow_queries | OFF | |slow_launch_time | 2 | |slow_query_log | OFF | |slow_query_log_file | /mysqllog/slow_log / slow_queries_3306.log | +---------------------+------------------------------------------+4 rows in set(0.00 sec)#检查慢查询日志的状态
- mysql > set global slow_query_log_file = '/mysqllog/slow_log/slow_queries_3306_new.log';
- Query OK,
- 0 rows affected(0.03 sec)
- mysql > set global slow_query_log = 1;
- Query OK,
- 0 rows affected(0.01 sec) mysql > set global long_query_time = 1;
- #检查状态是否成功开启mysql > show variables like '%slow%'; + ---------------------+----------------------------------------------+|Variable_name | Value | +---------------------+----------------------------------------------+|log_slow_queries | ON | |slow_launch_time | 2 | |slow_query_log | ON | |slow_query_log_file | /mysqllog/slow_log / slow_queries_3306_new.log | +---------------------+----------------------------------------------+4 rows in set(0.00 sec)
- mysql > select sleep(10) as a,
- 1 as b; + ---+---+|a | b | +---+---+|0 | 1 | +---+---+1 row in set(10.00 sec)
- mysql > [mysql@xxx - xxx~] $ more / mysqllog / slow_log / slow_queries_3306_new.log......Time Id Command Argument#Time: 140213 6 : 44 : 24#User@Host: root[root]@localhost[]#Query_time: 10.000365 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0 SET timestamp = 1392273864;
- select sleep(10) as a,
- 1 as b;
- mv / mysqllog / slow_log / slow_queries_3306.log / mysqlbackup / slow_log / slow_queries_3306.log.bak.20140213
四:分析工具 mysqlsla 的安装以及使用,mysqlsla 是 hackmysql.com 推出的一款 MySQL 的日志分析工具,功能非常强大. 数据报表, 非常有利于分析慢查询的原因, 包括执行频率, 数据量, 查询消耗等。
- yum install perl - DBI perl - DBD - MySQL perl - devel - y#安装依赖包wget ftp: //ftp.tw.freebsd.org/pub/distfiles/mysqlsla-2.03.tar.gz
- #下载perl Makefile.PL#预编译make#编译make install安装PS: 最好把此工具安装在本地的测试服务器上,然后将你的慢查询日志拷贝至本地进行分析,以免影响生产环境数据库。
- lt:表示日志类型,有slow,
- general,
- binary,
- msl,
- udl。sf: [ + -][TYPE], [TYPE]有SELECT,
- CREATE,
- DROP,
- UPDATE,
- INSERT,例如" + SELECT,
- INSERT",不出现的默认是 - ,即不包括。db:要处理哪个库的日志。top:表示取按规则排序的前多少条。sort:按某种规则排序,t_sum按总时间排序,c_sum按总次数排序。
- mysqlsla - lt slow mysql - slow.log或者mysqlsla - lt slow mysql - slow.log - sf" + SELECT" - db dbName - top 10 - sort t_sum也可以将结果输入到文件中,在windows下用Sublime Text 3查看。mysqlsla - lt slow / root / slow_queries_1013.log > /tmp/fx.log
- 总查询次数 (queries total),
- 去重后的sql数量 (unique)输出报表的内容排序 (sorted by)最重大的慢sql统计信息,
- 包括平均执行时间,
- 等待锁时间,
- 结果行的总数,
- 扫描的行总数.Count,
- sql的执行次数及占总的slow log数量的百分比.Time,
- 执行时间,
- 包括总时间,
- 平均时间,
- 最小,
- 最大时间,
- 时间占到总慢sql时间的百分比.95 % of Time,
- 去除最快和最慢的sql,
- 覆盖率占95 % 的sql的执行时间.Lock Time,
- 等待锁的时间.95 % of Lock,
- 95 % 的慢sql等待锁时间.Rows sent,
- 结果行统计数量,
- 包括平均,
- 最小,
- 最大数量.Rows examined,
- 扫描的行数量.Database,
- 属于哪个数据库Users,
- 哪个用户,
- IP,
- 占到所有用户执行的sql百分比Query abstract,
- 抽象后的sql语句Query sample,
- sql语句
来源: http://www.cnblogs.com/skymyyang/p/7239010.html