前言:
mysql慢日志有什么用?当然是查看系统中运行的慢sql啦,根据这里的信息,在对自己的程序或者sql语句进行优化。
MySQL数据库是常见的两个瓶颈是CPU和I/O的瓶颈,
1.CPU在饱和的时候一般发生在数据装入内存或从磁盘上读取数据时候。
2.磁盘I/O瓶颈发生在装入数据远大于内存容量的时候。
3.在应用分布在网络上,那么查询量相当大的时候那么平瓶颈就会出现在网络上。
4.查询量正常,但是加载很慢,就需要综合分析查看了
通过慢日志,show processlist,找出直接查询慢的sql,
进而结合其他命令,分析出根本原因在哪儿?是锁还是linux的cpu,mem瓶颈?等等(关于linux下系统的分析,后边博文会系列展开叙述)
查看是否开启了mysql慢日志查询
show VARIABLES like "%slow%";
如果没有开启,如下两种方法开启。
一.通过改变量开启
使用sql语句来修改:
语句列出来的变量,运行如下sql:
set global slow_query_log = ON; //打开慢日志查询
set global slow_query_log_file = '/var/mysql-slow.log';
set global long_query_time=1; #设置大于1s的sql语句记录下来
注意:重启以后就失效了,mysql启动加载的是配置文件里的设置。
二.改配置文件
1.先寻找mysql配置文件 my.cnf
find / -name my.cnf
或者
mysql --help | grep my.cnf
这里有四个文件,优先级从左到右,前者不存在依次往下找
找到了配置文件在/etc/my.cnf
2.编辑配置文件,打开慢日志查询
vi /usr/my.cnf
加上如下代码:
#最大sql运行时间
long_query_time=1
#slow_query_log,打开慢日志查询
slow_query_log=1
#慢日志存放地址
slow_query_log_file=/var/mysql-query-slow.log
#将所有没有使用带索引的查询语句全部写到慢查询日志中
log_queries_not_using_indexes=1
最后
1、日志不能说明一切问题,知识表象,可能跟锁表、系统繁忙的偶发性有关,当然,如果某条SQL语句经常查询慢那基本可以判断是可以再次优化的。
2、不要开启log-queries-not-using-indexes没有索引查询记录功能,这个功能实际用处不大。就是记录SQL查询的时候,没有索引的通通记录。虽然索引对查询的速度有影响,但要看数据量大小。因为开启了这个功能以后,select * from tab这样的查询也会被记录在日志中,很快日志文件就会被垃圾信息给充满,从而影响主要的查询慢日志记录的查看。
3、MySQL自带了mysqldumpslow工具用来分析slow query日志,或者其它工具也可以,通过工具配合可以更好的分析。
相关文章:
php错误日志:检测php运行时或用户自记录错误日志:
http://blog.csdn.net/ty_hf/article/details/55505262
mysql慢日志:记录mysql服务器中影响性能的SQL:
http://blog.csdn.net/ty_hf/article/details/55504172
本文地址:http://blog.csdn.net/ty_hf/article/details/55505612