您当前的位置:首页 > 电脑百科 > 数据库 > MYSQL

MySQL如何定位慢sql?

时间:2020-08-24 11:23:53  来源:  作者:

MySQL“慢SQL”定位

数据库调优我个人觉得必须要明白两件事
1.定位问题(你得知道问题出在哪里,要不然从哪里调优呢)
2.解决问题(这个没有基本的方法来处理,因为不同的问题处理的方式方法不一样,得从实践中不断的探索,如sql调优,配置优化,硬件升级等等)

步骤1:查询是否开启了慢查询

mysql> show variables like '%slow%';+---------------------------+--------------------------------+| Variable_name | Value |+---------------------------+--------------------------------+| log_slow_admin_statements | OFF || log_slow_slave_statements | OFF || slow_launch_time | 2 || slow_query_log | ON || slow_query_log_file | /data/mysql/localhost-slow.log |+---------------------------+--------------------------------+5 rows in set (0.01 sec)mysql>
复制代码

以MySQL5.7为例

我这里是开启了,没有开启的,直接set global slow_query_log=on;就ok了。

mysql> set global slow_query_log=on;Query OK, 0 rows affected (0.05 sec)
复制代码

步骤2:设置慢查询的时间限制

mysql默认的慢查询时间是10秒,可以设置成其它的时间。

mysql> show variables like 'long_query_time';+-----------------+-----------+| Variable_name | Value |+-----------------+-----------+| long_query_time | 10.000000 |+-----------------+-----------+1 row in set (0.03 sec)mysql> set long_query_time=1;Query OK, 0 rows affected (0.00 sec)mysql> show variables like 'long_query_time';+-----------------+----------+| Variable_name | Value |+-----------------+----------+| long_query_time | 1.000000 |+-----------------+----------+1 row in set (0.00 sec)mysql>
复制代码

set global 只是全局session生效,重启后失效,如果需要以上配置永久生效,需要在mysql.ini(linux my.cnf)中配置

步骤3:查看慢查询

show status like ‘slow_queries’;
复制代码

它会显示慢查询sql的数目,具体的sql就在上面的Log file日志中可以看到。

mysql> show status like 'slow_queries';+---------------+-------+| Variable_name | Value |+---------------+-------+| Slow_queries | 0 |+---------------+-------+1 row in set (0.01 sec)mysql>
复制代码

其它命令

show processlist:查看哪些线程在运行;show open tables:查看哪些表在使用。
复制代码

慢查询分析日志

改一下慢查询配置

mysql> set long_query_time=0.1;Query OK, 0 rows affected (0.05 sec)
复制代码

执行几条慢的SQL

mysql> select count(*) from users;+----------+| count(*) |+----------+| 100005 |+----------+1 row in set (0.28 sec)mysql> select * from users;......100005 rows in set (1.41 sec)mysql>
复制代码
mysql> select count(*) from user_address_copy;+----------+| count(*) |+----------+| 30006 |+----------+1 row in set (0.08 sec)mysql> select * from user_address_copy;......30006 rows in set (0.39 sec)mysql>
复制代码

vim 打开慢查询记录的文件slow_query_log_file | /data/mysql/localhost-slow.log

vim /data/mysql/localhost-slow.log

localhost-slow.log 内容如下:

/software/mysql/bin/mysqld, Version: 5.7.24 (MySQL Community Server (GPL)). started with:Tcp port: 3306 Unix socket: /software/mysql/mysql.sockTime Id Command Argument# Time: 2018-12-08T03:08:23.877322Z# User@Host: root[root] @ localhost [] Id: 24# Query_time: 0.551358 Lock_time: 0.000514 Rows_sent: 1 Rows_examined: 100005use test;SET timestamp=1544238503;select count(*) from users;# Time: 2018-12-08T03:09:06.038256Z# User@Host: root[root] @ localhost [] Id: 24# Query_time: 1.401716 Lock_time: 0.000220 Rows_sent: 100005 Rows_examined: 100005SET timestamp=1544238546;select * from users;# Time: 2018-12-08T03:12:03.207302Z# User@Host: root[root] @ localhost [] Id: 24# Query_time: 0.395499 Lock_time: 0.000378 Rows_sent: 30006 Rows_examined: 30006SET timestamp=1544238723;select * from user_address_copy;
复制代码

Time :日志记录的时间

User@Host:执行的用户及主机

Query_time:查询耗费时间 Lock_time 锁表时间Rows_sent 发送给请求方的记录条数 Rows_examined语句扫描的记录条数

SET timestamp 语句执行的时间点

select .... 执行的具体语句

慢查询日志分析工具

分析慢查询日志是性能调优中获取信息的主要方式之一。

如果slow log比较小,那么可以直接使用vi等文本编辑器或less、more命令打开。但如果slow log过大,载入慢查询日志将耗费大量时间,这个时候就要考虑使用其他工具来对慢查询进行分析了。

mysql的自带工具mysqldumpslow,可以有效的帮助我们对slow log进行筛选和分析。

官方文档5.7版本地址:dev.mysql.com/doc/refman/…

参看官方文档可以略去本文。

执行mysqldumpslow –h可以查看帮助信息。

主要介绍两个参数-s和-t

-s 这个是排序参数,可选的有:al: 平均锁定时间ar: 平均返回记录数at: 平均查询时间c: 计数l: 锁定时间r: 返回记录t: 查询时间-t n 显示头n条记录。
复制代码

实例:

mysqldumpslow -s c -t 20 host-slow.logmysqldumpslow -s r -t 20 host-slow.log
复制代码

上述命令可以看出访问次数最多的20个sql语句和返回记录集最多的20个sql。

mysqldumpslow -t 10 -s t -g “left join” host-slow.log

这个是按照时间返回前10条里面含有左连接的sql语句。

用了这个工具就可以查询出来那些sql语句是性能的瓶颈,进行优化,比如加索引,该应用的实现方式等。



Tags:MySQL 慢sql   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
MySQL“慢SQL”定位数据库调优我个人觉得必须要明白两件事 1.定位问题(你得知道问题出在哪里,要不然从哪里调优呢) 2.解决问题(这个没有基本的方法来处理,因为不同的问题处理的方...【详细内容】
2020-08-24  Tags: MySQL 慢sql  点击:(62)  评论:(0)  加入收藏
本文出自头条号老王谈运维,转载请说明出处。当你正在全神贯注的投入工作时MySQL语句变得特别缓慢,怎么办?如何在MySQL语句中找到低效率执行的SQL语句呢?这个问题困扰着一批又一...【详细内容】
2019-07-25  Tags: MySQL 慢sql  点击:(377)  评论:(0)  加入收藏
▌简易百科推荐
作者:雷文霆 爱可生华东交付服务部 DBA 成员,主要负责Mysql故障处理及相关技术支持。爱好看书,电影。座右铭,每一个不曾起舞的日子,都是对生命的辜负。 本文来源:原创投稿 *爱可生...【详细内容】
2021-12-24  爱可生    Tags:MySQL   点击:(6)  评论:(0)  加入收藏
生成间隙(gap)锁、临键(next-key)锁的前提条件 是在 RR 隔离级别下。有关Mysql记录锁、间隙(gap)锁、临键锁(next-key)锁的一些理论知识之前有写过,详细内容可以看这篇文章...【详细内容】
2021-12-14  python数据分析    Tags:MySQL记录锁   点击:(17)  评论:(0)  加入收藏
binlog 基本认识 MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二...【详细内容】
2021-12-14  linux上的码农    Tags:mysql   点击:(13)  评论:(0)  加入收藏
为查询优化你的查询 大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查...【详细内容】
2021-12-09  元宇宙iwemeta    Tags:mysql   点击:(15)  评论:(0)  加入收藏
测试的目的和原因,公司有很多程序员,每个程序员对数据库和表结构都有自己的理解。而且每个程序员的理解往往是以效率考虑。既然都是为了效率考虑,那么我就来测试一下究竟哪种使...【详细内容】
2021-12-08  吴彬的分享    Tags:Mysql数据库   点击:(14)  评论:(0)  加入收藏
当你们考虑项目并发的时候,我在部署环境,当你们在纠结使用ArrayList还是LinkedArrayList的时候,我还是在部署环境。所以啊,技术不止境,我在部环境。今天这篇文章缕一下在同一台服...【详细内容】
2021-12-08  秃头码哥    Tags:MySQL数据库   点击:(16)  评论:(0)  加入收藏
对于数据分析来说,MySQL使用最多的是查询,比如对数据进行排序、分组、去重、汇总及字符串匹配等,如果查询的数据涉及多个表,还需要要对表进行连接,本文就来说说MySQL中常用的查询...【详细内容】
2021-12-06  笨鸟学数据分析    Tags:MySQL   点击:(20)  评论:(0)  加入收藏
在学习SQL语句之前,首先需要区分几个概念,我们常说的数据库是指数据库软件,例如MySQL、Oracle、SQL Server等,而本文提到的数据库是指数据库软件中的一个个用于存储数据的容器。...【详细内容】
2021-11-24  笨鸟学数据分析    Tags:SQL语句   点击:(23)  评论:(0)  加入收藏
概述以前参加过一个库存系统,由于其业务复杂性,搞了很多个应用来支撑。这样的话一份库存数据就有可能同时有多个应用来修改库存数据。比如说,有定时任务域xx.cron,和SystemA域...【详细内容】
2021-11-05  Java云海    Tags:分布式锁   点击:(31)  评论:(0)  加入收藏
MySQL的进阶查询 一、 按关键字排序 使用ORDERBY语句来实现排序排序可针对一个或多个字段ASC:升序,默认排序方式 【升序是从小到大】DESC:降序 【降序是从大到小】ORDER BY的...【详细内容】
2021-11-05  Java热点    Tags:SQL语句   点击:(27)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条