首页 > 数据库 >mysql 慢查询的简要介绍

mysql 慢查询的简要介绍

时间:2023-06-07 16:25:38浏览次数:52  
标签:slow log 查询 简要 mysql query 日志

如何配置与查看慢查询

mysql 慢查询相关命令:

# 查看慢查询是否开启
SHOW VARIABLES LIKE '%slow_query_log%'

# 开启慢查询
SET GLOBAL slow_query_log='ON'

# 查看慢查询日志位置
SHOW VARIABLES LIKE '%slow_query_log_file%'

# 查看慢查询阈值,单位:秒
SHOW GLOBAL VARIABLES LIKE '%long_query_time%'

# 修改慢查询阈值,单位:秒
SET long_query_time=1

# 查看慢查询语句的数量
SHOW GLOBAL STATUS LIKE '%Slow_queries'

# 测试执行一个慢查询语句
SELECT SLEEP(3);

前面是通过命令行的方式设置,如果MySQL重启,那么配置就会重置。我们可以通过修改MySQL的配置my.cfg或者my.ini永久生效。

[mysqld]
slow_query_log=ON  # 开启慢查询日志开关
slow_query_log_file=/var/lib/mysql/alvin-slow.log  # 慢查询日志的目录和文件名信息
long_query_time=3  # 设置慢查询的阈值为3秒,超出此设定值的SQL即被记录到慢查询日志
log_output=FILE

可以配置的参数有:

  • slow_query_log:是否启用慢查询日志。
  • slow_query_log_file:指定慢查询日志位置及名称,默认值为host_name-slow.log,可指定绝对路径。
  • long_query_time:慢查询执行时间阈值,超过此时间会记录,默认为10,单位为s。
  • log_output:慢查询日志输出目标,默认为file,即输出到文件。
  • log_timestamps:主要是控制 error log、slow log、genera log 日志文件中的显示时区,默认使用UTC时区,建议改为 SYSTEM 系统时区。
  • log_queries_not_using_indexes:是否记录所有未使用索引的查询语句,默认为off。
  • min_examined_row_limit:对于查询扫描行数小于此参数的SQL,将不会记录到慢查询日志中,默认为0。
  • log_slow_admin_statements:慢速管理语句是否写入慢日志中,管理语句包含 alter table、create index 等,默认为 off 即不写入。

分析慢查询日志

通过前面命令行的操作,我们可以在慢查询日志文件中看到以下内容:

MySQL, Version: 5.7.28 (MySQL Community Server (GPL)). started with:
TCP Port: 3306, Named Pipe: MySQL
Time                 Id Command    Argument
# Time: 2023-06-07T08:01:23.502495Z
# User@Host: root[root] @ localhost [127.0.0.1]  Id:     2
# Query_time: 2.999793  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 0
SET timestamp=1686124883;
select sleep(3);

写入日志的每个语句都以 # 字符开头。对于每一组慢SQL,第一行记录的是该条 SQL 执行的时刻,第二行记录的是执行该语句的用户和 IP 以及链接 id ,第三行的几个字段解释如下:

  • Query_time: duration 语句执行时间,以秒为单位。
  • Lock_time: duration 获取锁的时间(以秒为单位)。
  • Rows_sent: N 发送给 Client 端的行数。
  • Rows_examined: N 服务器层检查的行数(不计算存储引擎内部的任何处理)。

最下面的两行分别是此语句执行时候的时间戳和具体的慢 SQL 。

慢查询日志分析命令 mysqldumpslow

如果要手工分析日志,查找、分析SQL,显然是个体力活,MySQL提供了日志分析命令 mysqldumpslow 。

mysqldumpslow 命令的具体参数如下:

-a: 不将数字抽象成N,字符串抽象成S
-s: 是表示按照何种方式排序:

  • c: 访问次数
  • l: 锁定时间
  • r: 返回记录
  • t: 查询时间
  • al:平均锁定时间
  • ar:平均返回记录数
  • at:平均查询时间 (默认方式)
  • ac:平均查询次数

-t: 即为返回前面多少条的数据;
-g: 后边搭配一个正则匹配模式,大小写不敏感的;

mysqldumpslow 位置mysql的bin目录下,以通过执行 mysqldumpslow --help命令查看使用。

举例: 我们想要按照查询时间排序,查看前五条 SQL 语句,这样写即可:

mysqldumpslow -s t -t 5 /usr/local/mysql/data/alvin-slow-slow.log

结果:
image

常见的用法:

#得到返回记录集最多的10个SQL
mysqldumpslow -s r -t 10 /usr/local/mysql/data/alvin-slow-slow.log

#得到访问次数最多的10个SQL
mysqldumpslow -s c -t 10 /usr/local/mysql/data/alvin-slow-slow.log

#得到按照时间排序的前10条里面含有左连接的查询语句
mysqldumpslow -s t -t 10 -g "left join" /usr/local/mysql/data/alvin-slow-slow.log

#另外建议在使用这些命令时结合 | 和more 使用 ,否则有可能出现爆屏情况
mysqldumpslow -s r -t 10 /usr/local/mysql/data/alvin-slow-slow.log | more

参考文章

你的哪些SQL慢?看看MySQL慢查询日志吧 - 掘金

MySQL慢日志全解析 - MySQL技术 - SegmentFault 思否

标签:slow,log,查询,简要,mysql,query,日志
From: https://www.cnblogs.com/FengZeng666/p/17463676.html

相关文章

  • GaussDB(DWS)查询过滤器原理与应用
    摘要:GaussDB(DWS)查询过滤器(黑名单)提供查询过滤功能,支持自动隔离反复被终止的查询,防止烂SQL再次执行。本文分享自华为云社区《GaussDB(DWS)查询过滤器原理与应用》,作者:门前一棵葡萄树。一、概述GaussDB(DWS)查询过滤器(黑名单)提供查询过滤功能,支持自动隔离反复被终止的查询,防止......
  • mysql-编写脚本-批量插入数据
    一、代码--报工设置,添加数据set@org_id='租户id';set@created_user='yike';set@updated_user='yike';set@dispatch_list_id=<物料id>;set@process_name='工序名称';set@process_code='工序code';set@code=&......
  • MySQL逻辑架构及执行过程
    一:MySQL逻辑架构1:MySQL逻辑架构客户端进程发送请求后服务器进程对接受的客户端请求做了什么处理,才能产生最后的处理结果呢?下面就看看大致的逻辑架构图上图基本组件介绍:连接层:Connectors【连接器】:MySQL服务之外的客户端程序请求MySQL或进行权限验证......
  • 飞步fireboom 不同库关联查询
    fireboom关联查询demo列表queryMyQuery($skip:Int=10,$take:Int=10,$tid:Int){list:iot_device_bill_findManydevice_information(skip:$skip,take:$take){tenant_id@export(as:"tid")tenant_info:_join{data:iot_core_findFirstsys_......
  • mysql 查询故障排查之字符集的锅
    在查询优化的处理中,一般想到的是在对应关联字段上增加对应索引来加快访问速度.但有时加了索引,即使是唯一索引也无法提高查询速度. descselectxxx;查看对应自行计划,使用了索引,但是对应的耗时却特别的高. descformat=jsonselectxxxx;查看具体的消耗发现在表字段关联的......
  • MySQL基础
    使用命令行窗口链接MySQL数据库。操作示意图。数据库三层结构。1.所谓安装MySQL数据库,就是在主机安装一个数据库管理系统(DBMS),这个管理程序可以管理多个数据库。DBMS(databasemanagesystem)2.一个数据库中可以创建多个表。以保存数据。3.数据库管理系统(DBMS)、数据库和表的关......
  • 【HMS Core】Health Kit查询历史数据查询数据和返回数据不一致
    【问题描述】查询一个月运动记录,只能查询到最早5月26的数据,但是华为健康app里的数据最早为5月8日,为什么会查询不到?【解决方案】1、需要检查是否申请了历史数据权限,查询数据时,出于对用户的数据保护,只允许开发者查询在用户授权之后的数据。例如用户是在2022年2月14日授权,那么2022年2......
  • mysql 常用命令总结
    mysql常用命令总结1、修改mysql密码mysqladmin-u用户名-p旧密码password新密码命令行setpasswordforroot=PASSWORD("root");2、增加mysql新用户并授权:createuser'test'@'localhost'identifiedby'test'grant select,update,delete,inserton库名.......
  • mysql 中添加索引的三种方法
    在mysql中有多种索引,有普通索引,全文索引,唯一索引,多列索引,小伙伴们可以通过不同的应用场景来进行索引的新建,在此列出三种新建索引的方法mysql中添加索引的三种方法1.1新建表中添加索引①普通索引1234567createtablet_dept(nointnotnullprimarykey,nameva......
  • 【HMS Core】Health Kit查询历史数据查询数据和返回数据不一致
    【问题描述】查询一个月运动记录,只能查询到最早5月26的数据,但是华为健康app里的数据最早为5月8日,为什么会查询不到? 【解决方案】1、需要检查是否申请了历史数据权限,查询数据时,出于对用户的数据保护,只允许开发者查询在用户授权之后的数据。例如用户是在2022年2月14日授权,那么2......