美文网首页
mysql慢查询

mysql慢查询

作者: 一剑仙人跪_ | 来源:发表于2019-08-19 11:48 被阅读0次

转自: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中去

统计参数说明

  1. queries total: 总查询次数

  2. unique:去重后的sql数量

  3. sorted by : 输出报表的内容排序 最重大的慢sql统计信息, 包括 平均执行时间, 等待锁时间, 结果行的总数, 扫描的行总数.

  4. Count: sql的执行次数及占总的slow log数量的百分比.

  5. Time: 执行时间, 包括总时间, 平均时间, 最小, 最大时间, 时间占到总慢sql时间的百分比.

  6. 95% of Time: 去除最快和最慢的sql, 覆盖率占95%的sql的执行时间.

  7. Lock Time: 等待锁的时间.

  8. 95% of Lock: 95%的慢sql等待锁时间.

  9. Rows sent: 结果行统计数量, 包括平均, 最小, 最大数量.

  10. Rows examined: 扫描的行数量.

  11. Database: 属于哪个数据库.

  12. Users: 哪个用户,IP, 占到所有用户执行的sql百分比.

  13. Query abstract: 抽象后的sql语句.

  14. Query sample: sql语句.

相关文章

网友评论

      本文标题:mysql慢查询

      本文链接:https://www.haomeiwen.com/subject/qilssctx.html