MySQL基础学习:如何排查慢SQL

一、MySQL SQL的执行基本流程

在这里插入图片描述

二、导致慢SQL原因总结

1、SQL语句问题

(1)SQL没有加索引或索引失效

(2)limit分页太深

(3)join、子查询、in太多

(4)查询了很多无用的字段

(5)查询使用了临时表

(6)锁竞争问题

2、数据库连接问题

(1)原因

连接数过小

(2)产生原理

MySQL的连接管理模块作用是管理客户端和MySQL之间的长连接,如果两者之间只有一个长连接。如果在并发执行SQL的情况下产生阻塞,只能等待上一个SQL执行完成。

(3)解决方案

在应用端使用连接池。在MySQL端默认连接数为100,最大连接数为16384。可以通过一下命令修改MySQL的最大连接数:

set global max_connections = 500

3、数据库配置不合理问题

(1)Buffer Pool太小

InnoDB里有一层内存Buffer Pool,会缓存内存数据加速查询,通过如下命令设置Buffer Pool大小:

set global innodb_buffer_pool_size=

(2)如何确认是不是Buffer Pool太小导致的

通过show status like 'innodb_buffer_pool_%'查询Buffer Pool的缓存命中率,buffer pool命中率 = 1 - (Innodb_buffer_pool_reads / Innodb_buffer_pool_read_requests) * 100%

  • Innodb_buffer_pool_reads:表示从物理磁盘中读数据的次数。
  • Innodb_buffer_pool_read_requests:表示读请求的次数。
    一般情况下命中率都在99%以上。

4、系统资源问题

需要检查服务器性能有没有存在瓶颈,如果服务器资源使用率比较高例如:CPU、硬盘,这些会导致访问变慢。

4、网络问题

5、数据库数据量太大问题

需要考虑分库分表

三、如何排查慢SQL

1、show processlist;

通过该命令可以实时查看SQL的执行时长

2、开启慢查询日志

通过show variables like '%query%'查看query相关的配置:
在这里插入图片描述

  • long_query_time: 用于设置慢查询记录的阈值,单位秒,默认值为10。
  • show_query_log: 是否启用慢查询日志记录,默认为OFF。
  • slow_query_log_file: 配置慢查询日志信息记录路径。

通过如下命令启用慢查询:

set global slow_query_log = ON;

四、参考

  • https://www.bilibili.com/video/BV1s1steVEkR/?spm_id_from=333.1007.tianma.1-1-1.click&vd_source=cd03889ff27e1a185b3e97e3ed96d260
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

玉成226

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

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

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

打赏作者

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

抵扣说明:

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

余额充值