探秘MySQL——排查与调优

文章介绍了如何排查MySQL中的SQL执行错误,通过错误码和错误详情定位问题,并讲解了如何配置和利用慢查询日志来优化查询性能,包括关注的参数如long_query_time,以及通过索引和分解复杂SQL进行问题排查。
摘要由CSDN通过智能技术生成

一、问题排查一:SQL执行出错

使用工具: Navicat for MySQL

当执行了一条错误的SQL语句,会显示错误信息,包含了错误码、错误详情。
在这里插入图片描述

错误详情中会显示出错的原因和具体位置,方便我们进行位置的定位和排查。

1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '* from admin' at line 1

一般来说,根据错误详情就能直接判断出错原因,但有时候,可能会出现一些我们从来没遇到过的问题,此时,借助互联网,对问题进行一个检索,并且还要甄别网络上提供的解决方式是否靠谱,可以多多尝试。

二、问题排查二:慢查询

使用工具: 慢查询日志

0.几个重要参数

# 是否开启慢查询日志,默认OFF,开启则设置为 ON
slow_query_log 

# 慢查询日志文件存储位置
slow_query_log_file 

# 是否把没有使用到索引的SQL记录到日志中,默认OFF,开启则设置为 ON
log_queries_not_using_indexes 

# 超过多少秒的查询才会记录到日志中,注意单位是秒
long_query_time 

1.配置慢查询日志

命令行配置(重启失效)

在数据库中执行以下语句:

SET GLOBAL slow_query_log_file = 'D:/setup/mysql8.0.27/log/slow.log';
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL log_queries_not_using_indexes = 'ON';
SET GLOBAL long_query_time = 0.001;

通过查询看看是否配置成功:


SELECT @@global.slow_query_log_file;

修改配置文件(永久生效)

【先留个坑在这】

2.查看慢查询日志

打开慢查询日志,查看里面的一条记录:

# Time: 2023-03-12T09:32:24.818300Z
# User@Host: root[root] @ localhost [::1]  Id:    11
# Query_time: 0.003975  Lock_time: 0.000116 Rows_sent: 393  Rows_examined: 786
SET timestamp=1678613544;
select * from text
order by application_no;
  • 可以看到以下信息:
    查询用户User
    查询耗费时间Query_time
    锁等待时间Lock_time
    结果集行数Rows_sent
    累积扫描行数Rows_examined
    具体的SQL语句

这些信息可以协助我们排查慢查询问题。

3.问题排查1:Look_time耗时

Look_time耗时反映了事务的并发性能,如果慢查询日志中出现了很多这样的记录,说明是事务的并发性能出现了问题。

  • 执行命令查询MySQL整体的锁状态:
show status like 'innodb_row_lock_%';

如果查询出来的值比较大,就意味着你当前MySQL服务器承载的并发压力过高,此时就急需进行系统的高并发优化。

4.问题排查2:索引

如果不是事务并发问题,那么很有可能是SQL本身有问题,比如可能是索引方面需要优化。

这个问题参考我的另一篇博客:这里

5.问题排查3:拆解复杂SQL

如果一条复杂的SQL出现效率问题,为了准确地定位问题所在,可以采取分解SQL子句的方式进行问题排查。

  • 用explain检查每个SQL子句,初步定位问题;
  • SQL子句逐条合并,每合并一次用explain检查一次。

参考

博客
慢查询
mysql配置文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TracyCoder123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值