mysql怎么查询慢的sql语句

方法:1、若未开启慢查询,用“set global slow_query_log=’ON’;”开启慢;2、用“set global slow_query_log_file=路径”设置慢查询文件保存位置;3、用“subl 路径”查询文件即可。

mysql怎么查询慢的sql语句

本教程操作环境:centos 7系统、mysql8.0.22版本、Dell G3电脑。

mysql怎么查询慢的sql语句

Mysql中 查询慢的 Sql语句的记录查找

慢查询日志 slow_query_log,是用来记录查询比较慢的sql语句,通过查询日志来查找哪条sql语句比较慢,这样可以对比较慢的sql可以进行优化。

登陆mysql数据库:

946fec1846b813a110c575f91696b707.png

1、查看一下当前的慢查询是否开启,若未开启则开启

以及慢查询所规定的时间:

show variables like 'slow_query_log';show variableslike 'long_query_time';

29544d460022b805080a761fc0e8b1c7.png

如果你的查询后的结果是OFF 状态的话,就需要通过相关设置将其修改为ON状态:

set global slow_query_log='ON';

0ce337ae6b2ed871bbb838f51c76b74b.png

将慢查询追踪的时间设置为1s:

3c5271fad553209759d2f94e492ca330.png

这里你在设置之后,这个世界是不会立即变成1s的,需要在数据库重启后才生效:

d06644b7ada4bb6306b3ec38d8b17e76.png

2、设置慢查询日志文件保存的位置:

set global slow_query_log_file='/var/lib/mysql/test_1116.log';

3、 查看以下配置后的文件:

sudo subl /var/lib/mysql/test_1116.log

deeed4dc7adc56a96d4c8d04dcf61f70.png

扩展知识:

MySQL数据库慢查询问题排查方法

最近碰到了几次数据库响应变慢的问题,整理了一下处理的流程和分析思路,执行脚本。希望对其他人有帮助。

MySQL慢查询表现

明显感觉到大部分的应用功能都变慢,但也不是完全不能工作,等待比较长的时间还是有响应的。但是整个系统看起来就非常的卡。

查询慢查询数量

一般来说一个正常运行的MySQL服务器,每分钟的慢查询在个位数是正常的,偶尔飙升到两位数也不是不能接受,接近100系统可能就有问题了,但是还能勉强用。这几次出问题慢查询的数量已经到了1000多。

慢查询的数量保存在mysql库里面的slow_log表。

SELECT * FROM `slow_log` where start_time > '2019/05/19 00:00:00';

这样就能查出一天以来的慢查询了。

查看当前进行的查询状态

大家应该都比较常用show processlist来查看当前系统中正在执行的查询,其实这些数据也保存在information_schema库里面的processlist表,因此如果要做条件查询,直接查询这张表更方便。

比如查看当前所有的process

select * from information_schema.processlist

查看当前正在进行的查询并按照已经执行时间倒排

select * from information_schema.processlist where info is not null order by time desc

正常运行的数据库,因为一条查询的执行速度很快,被我们的select抓到的info不是null的查询数量会很少。我们这样负荷很大的库一般也就只能查到几条。如果一次能查到info非空的查询有几十条,那么也可以认为系统出问题了。

系统问题和定位

当我们察觉到系统变慢之后,马上用慢查询和查看processlist的方式做了检查,结果发现每分钟慢查询数量飙升到1000多,同时淤积了大量的查询在执行中。

因为当务之急是尽快恢复系统的正常运行,因此影响最直接的做法是在processlist的查询结果中,查看有多少哪些查询处于lock状态,或者已经执行了很长时间,把这些process用kill指令干掉。通过不停的杀死这些可能会引发系统阻塞的process,最终能够暂时让系统逐步恢复到正常状态,当然这只是权宜之计。

此外,最重要的当然是分析到底是哪些查询为什么会引发系统阻塞,我们还是使用慢查询来做分析。

慢查询表查询结果里面有几个比较重要的指标:

start_time 开始时间,要通过这个参数,配合系统出问题的时间,定位哪些查询是罪魁祸首。

query_time 查询时间

rows_sent 和 rows_examined发送的结果数以及查询扫过的行数,这两个值特别重要,特别是 rows_examined。基本上就能告诉我们,哪个查询是需要注意的“大”查询。

实际操作中,我们也是把有大量rows_examined的查询一个个拿出来分析,添加索引,修改查询语句的编写,来彻底的解决问题。

处理结果和反思

经过对所有慢查询的检查和整改,目前MySQL每分钟慢查询数徘徊在1~2之间,CPU的负荷也非常低。问题算是基本得到了解决。

反思一下问题出现的原因,有几个地方需要注意:

1,数据库出问题往往不是上线即引发问题,而是有一个累积的过程,不断累加的糟糕的查询语句会逐步增加系统负载,最后压倒骆驼的最后一根稻草往往看上去莫名其妙

2,最后的一根稻草甚至有可能根本不存在,不是一次发版或者是功能上线,而是随着用户使用量上升,数据量的累积而爆发

3,既然问题的出现是累积的过程,就需要在每次代码发版之前做好review

4,索引的添加很重要

5,慢查询的监控也需要纳入到Zabbix的监控范围

推荐学习:mysql视频教程

以上就是mysql怎么查询慢的sql语句的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/175115.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Laravel中Redis缓存优化技巧
上一篇 2026年8月31日 06:53:31
VSCode中怎么用Git_VSCode集成Git进行版本控制的基本操作教程
下一篇 2026年8月31日 06:57:21

相关推荐

  • 如何使用mysql设计在线投票系统

    答案:设计在线投票系统需合理规划数据库结构并实现清晰业务逻辑。1. 建立users(可选)、polls、options和votes表,分别存储用户、投票主题、选项及投票记录;2. 支持单选、多选、限时、匿名或实名投票类型,通过应用层校验限制重复投票;3. 关键SQL操作包括创建投票与选项、检查用户投…

    2026年9月10日
    000
  • mysql如何使用time函数处理时间

    TIME()提取时间部分,如TIME(‘2024-05-20 14:30:25’)返回14:30:25;2. CURTIME()获取当前系统时间;3. TIMEDIFF()计算两时间差值;4. ADDTIME()/SUBTIME()进行时间加减;5. TIME_FORMAT(…

    2026年9月10日
    100
  • mysql如何设计表结构避免冗余

    遵循数据库三范式,通过拆分实体表并用外键关联,消除数据冗余。例如用户、地址、订单分表存储,确保字段原子性、完全依赖主键且无传递依赖,必要时谨慎反范式化以提升性能。 在MySQL中设计表结构避免冗余,核心是遵循数据库规范化原则,合理拆分数据,建立清晰的关系。关键在于识别数据依赖、消除重复字段,并通过外…

    2026年9月10日
    400
  • MySQL查询优化器是怎么工作的_如何利用它提升效率?

    MySQL查询优化器是怎么工作的_如何利用它提升效率?MySQL查询优化器是怎么工作的_如何利用它提升效率?MySQL查询优化器是怎么工作的_如何利用它提升效率?MySQL查询优化器是怎么工作的_如何利用它提升效率?

    mysql查询优化器的核心任务是找出执行查询的最优路径。它会分析sql语句并决定使用哪个索引、访问表的顺序以及是否使用临时表等,最终生成高效的执行计划。其基本工作流程包括解析sql、预处理、逻辑优化、物理优化和生成执行计划五个步骤。要查看优化器的工作情况,可使用explain或explain ana…

    2026年9月10日 用户投稿
    300
  • 如何在mysql中管理用户权限

    创建用户并授予权限是MySQL安全管理的核心,通过CREATE USER创建用户,GRANT分配权限,REVOKE撤销权限,DROP USER删除用户,遵循最小权限原则可提升数据库安全性。 在 MySQL 中管理用户权限主要通过创建用户、授予权限、撤销权限和删除用户等操作来实现。合理配置权限能保障数…

    2026年9月10日
    200
  • 如何在mysql中使用ORDER BY和LIMIT获取Top N记录

    答案是使用ORDER BY结合LIMIT子句获取Top N记录。具体为:通过SELECT 列名 FROM 表名 ORDER BY 排序列 DESC LIMIT N语法查询最高或最新数据,如SELECT name, score FROM scores ORDER BY score DESC LIMIT…

    2026年9月10日
    100
  • 如何在mysql中分析复制日志错误

    首先检查复制状态,使用SHOW SLAVE STATUSG查看Slave_IO_Running和Slave_SQL_Running状态及Last_Error信息;再分析错误日志文件hostname.err中与“[ERROR]”或“Replication”相关的记录;最后根据主键冲突、GTID不一致、…

    2026年9月10日
    200
  • mysql数据库如何进行性能基准测试

    答案是MySQL性能基准测试需明确目标如TPS、QPS、响应时间及并发能力,根据业务场景选择工具如sysbench、mysqlslap或HammerDB,设计贴近实际的测试方案,结合系统资源与数据库状态监控,持续验证优化效果。 MySQL数据库的性能基准测试,核心在于模拟真实业务场景下的负载,评估系…

    2026年9月10日
    400
  • 如何在安装mysql时设置默认存储引擎

    在MySQL配置文件的[mysqld]段落中添加default-storage-engine=InnoDB,2. 初始化时可通过命令指定默认引擎,3. 启动后执行SHOW VARIABLES验证设置,创建表并用SHOW CREATE TABLE确认引擎类型是否生效。 在安装 MySQL 时设置默认存…

    2026年9月10日
    100
  • Laravel模型递增ID?自增ID如何禁用?

    禁用Laravel自增ID需在迁移中使用uuid(‘id’)->primary()并设置模型$incrementing = false和$keyType = ‘string’,以支持UUID主键。 Laravel模型默认是使用自增ID作为主键的,…

    2026年9月10日
    200
  • 如何使用mysql实现购物车结算功能

    答案:购物车结算需通过MySQL事务保证数据一致性,先设计用户、商品、购物车、订单及明细表,结算时开启事务,锁定商品库存并校验,计算金额后创建订单与明细,扣减库存并清空购物车,最后提交事务;若任一步骤失败则回滚。关键在于使用InnoDB引擎、行级锁和索引优化,并避免长时间锁表以减少死锁风险。 购物车…

    2026年9月10日
    300
  • mysql数据库中如何优化联合主键

    合理设计联合主键需注意字段顺序、数量与类型。应将高筛选性的高基数字段如user_id置于前面,遵循最左前缀原则;控制字段数在2-3个以内,避免索引膨胀;禁用大字段或变长类型如VARCHAR(255),优先选用短小定长数值类型;并结合主要查询场景优化,确保主键支持高频查询路径,必要时补充复合索引以提升…

    2026年9月10日
    200
  • 如何在mysql中优化写入性能避免锁冲突

    答案:优化MySQL写入性能需选用InnoDB引擎、合理设计索引、控制事务大小、使用批量操作并调整参数。具体包括:确保ENGINE=InnoDB以支持行级锁;仅创建必要索引,避免频繁更新列和随机主键;将大事务拆分为小批次提交;采用多行INSERT或LOAD DATA INFILE提升写入效率;设置i…

    2026年9月10日
    100
  • 如何在mysql中升级大事务支持

    调整InnoDB日志和缓冲池参数可提升MySQL大事务处理能力,需增大innodb_log_file_size、innodb_log_buffer_size和innodb_buffer_pool_size;优化binlog设置以支持大事务记录;结合应用层拆分事务并监控执行状态,确保系统稳定高效。 M…

    2026年9月10日
    100
  • 如何在mysql中排查存储过程执行异常

    排查MySQL存储过程执行异常需先定位错误来源,再结合日志、异常捕获与调试手段。首先查看log_error路径并检查错误日志,确认是否存在死锁、超时或权限问题;可临时开启general_log追踪SQL执行流程。在存储过程中使用DECLARE HANDLER捕获SQLEXCEPTION,并通过GET…

    2026年9月10日
    200
  • 如何在mysql中使用CASE表达式实现条件逻辑

    CASE表达式在MySQL中用于实现条件逻辑,支持简单CASE和搜索CASE两种形式,可在SELECT、WHERE、ORDER BY等子句中使用;常用于返回自定义值、控制查询逻辑、结合聚合函数进行分组统计,提升SQL表达能力与实用性。 在MySQL中,CASE表达式是一种强大的工具,用于在查询中实现…

    2026年9月10日
    000
  • 如何区分mysql中INNER JOIN和LEFT JOIN

    INNER JOIN只返回两表匹配的行,LEFT JOIN返回左表全部记录且右表无匹配时补NULL。例如查询用户及其订单:INNER JOIN仅包含有订单的用户;LEFT JOIN包含所有用户,无订单者对应字段为NULL。核心区别:INNER JOIN需双向匹配,LEFT JOIN保留左表所有记录。…

    2026年9月10日
    100
  • 安装mysql后如何配置SSL连接

    答案:配置MySQL SSL连接需先确认SSL支持,生成证书和密钥,配置文件中指定路径并重启服务,最后设置用户强制使用SSL。具体步骤包括检查have_ssl变量,用mysql_ssl_rsa_setup生成证书,正确设置文件权限与归属,在my.cnf中添加ssl-ca、ssl-cert、ssl-k…

    2026年9月9日
    200
  • 如何在mysql中使用HAVING筛选分组结果

    HAVING用于筛选分组后的聚合结果,如SELECT customer_id, COUNT() FROM orders GROUP BY customer_id HAVING COUNT() > 3。 在 MySQL 中,HAVING 子句用于对分组后的结果进行筛选,它与 GROUP BY 配…

    2026年9月9日
    400
  • mysql安装后怎么存储 mysql存储过程编写入门教程

    mysql安装后怎么存储 mysql存储过程编写入门教程mysql安装后怎么存储 mysql存储过程编写入门教程mysql安装后怎么存储 mysql存储过程编写入门教程mysql安装后怎么存储 mysql存储过程编写入门教程

    存储过程是mysql中用于封装sql逻辑的对象,使用它可以提升性能和维护性。其优势包括减少网络传输、提高执行效率及封装业务逻辑。创建存储过程的基本语法为delimiter //create procedure 存储过程名(参数列表)begin sql语句end //delimiter ;例如可创建g…

    2026年9月9日 用户投稿
    200

发表回复

登录后才能评论
关注微信