mysql:慢sql查询

这篇具有很好参考价值的文章主要介绍了mysql:慢sql查询。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

1. 登陆我们的mysql数据库:

2. 查看一下当前的慢查询是否开启,以及慢查询所规定的时间:

show variables like 'slow_query_log';

show variableslike 'long_query_time';

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

set global slow_query_log='ON';

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

这里你在设置之后,需要在数据库重启后才生效:

5. 设置慢查询日志文件保存的位置:

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

6. 查看以下配置后的文件:

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

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

MySQL慢查询表现

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

查询慢查询数量

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

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

SELECT * FROM `slow_log` where start_time > '2022/11/01 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的查询一个个拿出来分析,添加索引,修改查询语句的编写,来彻底的解决问题。

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

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

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

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

4,索引的添加很重要

5,慢查询的监控也需要纳入到监控范围文章来源地址https://www.toymoban.com/news/detail-410911.html

到了这里,关于mysql:慢sql查询的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL查看系统性能参数、统计SQL的查询成本last_query_cost的使用

    在MySQL中,可以使用 SHOW STATUS 语句查询一些MySQL数据库服务器的 性能参数、执行频率 。 语法如下: SHOW  [ GLOBAL | SESSION]  STATUS  LIKE  \\\'参数\\\'; 一些常用的性能参数如下: Connections:连接MySQL服务器的次数 Uptime:MySQL服务器上线时间(启动时长,单位:秒) Slow_queries:慢查询次

    2024年02月16日
    浏览(51)
  • MySQL—一条查询SQL语句的完整执行流程

    表结构和数据如下: 我们分析的sql语句如下: 大体来说,MySQL可以分为Server层和存储引擎层两部分: Server层 包括:连接器、查询缓存、分析器、优化器、执行器等 涵盖MySQL的大多数核心服务功能 所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在

    2024年04月28日
    浏览(47)
  • MySQL中,SQL 查询总是先执行SELECT语句吗?

    在使用 MySQL 进行查询时,我们通常会使用 SELECT 语句,但是 SELECT 语句是否总是最先被执行呢?这是一个非常有趣的问题,本文将对此进行探讨。 在 MySQL 中,SQL 查询通常包括以下几个步骤: 语法解析 :MySQL 会对 SQL 查询语句进行语法解析,检查语句是否符合 SQL 语法规范。

    2023年04月09日
    浏览(36)
  • 【MYSQL高级】Mysql找出执行慢的SQL【慢查询日志使用与分析】

    慢查询的开启并捕获:开启慢查询日志,设置阈值,比如超过5秒钟的就是慢SQL,至少跑1天,看看生产的慢SQL情况,并将它抓取出来 explain + 慢SQL分析 show Profile。(比explain还要详细,可以查询SQL在MySQL数据库中的执行细节和生命周期情况) 运维经理 OR DBA,进行MySQL数据库服务

    2024年02月13日
    浏览(27)
  • Mysql的学习与巩固:一条SQL查询语句是如何执行的?

    我们经常说,看一个事儿千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样能够帮助你从高维度理解问题。同样,对于MySQL的学习也是这样。平时我们使用数据库,看到的通常都是一个整体。比如,你有个最简单的表,表里只有一个ID字段,在执行下面这个查询语句时:

    2023年04月13日
    浏览(71)
  • mysql高级三:sql性能优化+索引优化+慢查询日志

    内容介绍 单表索引失效案例 0 、思考题: 如果把 100 万数据插入 MYSQL ,如何提高插入效率 (1)关闭自动提交,只手动提交一次 (2)删除除主键索引外其他索引 (3)拼写mysql可以执行的长sql,批量插入数据 (4)使用java多线程 (5)使用框架,设置属性,实现批量插入 1、

    2024年02月12日
    浏览(47)
  • MySQL数据库增删改查及聚合查询SQL语句学习汇总

    目录 数据库增删改查SQL语句 MySQL数据库指令 1.查询数据库 2.创建数据库 3.删除数据库 4.选择数据库 创建表table   查看所有表 创建表 查看指定表的结构 删除表 数据库命令进行注释 增删改查(CRUD)详细说明 增加 SQL库提供了关于时间的函数:now()  查询 查询表作列与列之间进

    2024年02月09日
    浏览(66)
  • MYSQL实战45讲笔记--基础架构:一条SQL查询语句是如何执行的?

    MySQL 可以分为 Server 层和存储引擎层两部分。 Server 层 :连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等

    2024年02月07日
    浏览(36)
  • Mysql找出执行慢的SQL【慢查询日志使用与分析】

    慢查询的开启并捕获:开启慢查询日志,设置阈值,比如超过5秒钟的就是慢SQL,至少跑1天,看看生产的慢SQL情况,并将它抓取出来 explain + 慢SQL分析 show Profile。(比explain还要详细,可以查询SQL在MySQL数据库中的执行细节和生命周期情况) 运维经理 OR DBA,进行MySQL数据库服务

    2024年02月11日
    浏览(36)
  • MySQL 联表查询重复数据并删除(子查询删除记录) SQL优化

    数据库表介绍: table_a :主表(小表,表数据不可重复) table_b :流水表(大表,记录审核流水数据) 注:两表表结构大致一致,流水表增加一个审核状态的字段 业务逻辑: 主表保存唯一数据,流水表记录审核流水数据,用于后续展示,并在审核成功后插入主表,在插入流

    2023年04月08日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包