转自:https://www.cnblogs.com/luyucheng/p/6265594.html
一、简介
开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能。
二、参数说明
slow_query_log 慢查询开启状态
slow_query_log_file 慢查询日志存放的位置(这个目录需要MySQL的运行帐号的可写权限,一般设置为MySQL的数据存放目录)
long_query_time 查询超过多少秒才记录
三、设置步骤
1.查看慢查询相关参数
mysql> show variables like 'slow_query%';
+---------------------------+----------------------------------+
| Variable_name | Value |
+---------------------------+----------------------------------+
| slow_query_log | OFF |
| slow_query_log_file | /mysql/data/localhost-slow.log |
+---------------------------+----------------------------------+
mysql> show variables like 'long_query_time';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
2.设置方法
方法一:全局变量设置
将 slow_query_log 全局变量设置为“ON”状态
mysql>set global slow_query_log='ON';
设置慢查询日志存放的位置
mysql>set global slow_query_log_file='/usr/local/mysql/data/slow.log';
查询超过1秒就记录
mysql> set global long_query_time=1;
方法二:配置文件设置
修改配置文件my.cnf,在[mysqld]下的下方加入
[mysqld]
slow_query_log = ON
slow_query_log_file = /usr/local/mysql/data/slow.log
long_query_time = 1
3.重启MySQL服务
4.查看设置后的参数
mysql> show variables like 'slow_query%';
+---------------------+--------------------------------+
| Variable_name | Value |
+---------------------+--------------------------------+
| slow_query_log | ON |
| slow_query_log_file | /usr/local/mysql/data/slow.log |
+---------------------+--------------------------------+
mysql> show variables like 'long_query_time';
+-----------------+----------+
| Variable_name | Value |
+-----------------+----------+
| long_query_time | 1.000000 |
+-----------------+----------+
四、测试
1.执行一条慢查询SQL语句
mysql> select sleep(2);
2.查看是否生成慢查询日志
cat /usr/local/mysql/data/slow.log
如果日志存在,MySQL开启慢查询设置成功!
3.查询有多少条慢查询记录,可以使用Slow_queries系统变量
mysql> show global status like '%Slow_queries%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Slow_queries | 8 |
+---------------+-------+
4.mysqldumpslow工具
得到访问次数最多的10个SQL
mysqldumpslow -s c -t 10 slow.log
查看更多:
MySQL优化
MySQL各存储引擎
MySQL锁详解
MySQL事务
MySQL索引类型
分析:
MySQL慢查询优化 EXPLAIN详解 - jerome_s的博客 - CSDN博客 https://blog.csdn.net/Jerome_s/article/details/52589860
Mysql慢查询日志的使用 和 Mysql的优化 - m_nanle_xiaobudiu - CSDN博客 https://blog.csdn.net/m_nanle_xiaobudiu/article/details/79288257
五. mysqlsla 日志分析命令使用
[root@server-10 ~]# mysqlsla -lt slow --sort t_sum --top 20 mysql-slow.log > /tmp/select.log
// 查询记录最多的20个sql语句,并写到select.log中去。
[root@server-10 ~]# mysqlsla -lt slow -sf "+select" -top 100 mysql-slow.log >/tmp/sql_select.log
// 统计慢查询文件为mysql-slow.log中的所有select的慢查询sql,并显示执行时间最长的100条sql,并写到sql_select.log中去
[root@server-10 ~]# mysqlsla -lt slow -sf "+select,update" -top 100 -sort c_sum -db mydata mysql-slow.log >/tmp/sql_num.log
// 统计慢查询文件为mysql-slow.log的数据库为mydata的所有select和update的慢查询sql,并查询次数最多的100条sql,并写到sql_num.sql中去
统计参数说明
-
queries total: 总查询次数
-
unique:去重后的sql数量
-
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语句.
网友评论