当前位置: 首页 > news >正文

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

这里写自定义目录标题

  • 一、MySQL SQL的执行基本流程
  • 二、导致慢SQL原因总结
    • 1、SQL语句问题
      • (1)SQL没有加索引或索引失效
      • (2)limit分页太深
      • (3)join、子查询、in太多
      • (4)查询了很多无用的字段
      • (5)查询使用了临时表
      • (6)锁竞争问题
    • 2、数据库连接问题
      • (1)原因
      • (2)产生原理
      • (3)解决方案
    • 3、数据库配置不合理问题
      • (1)Buffer Pool太小
      • (2)如何确认是不是Buffer Pool太小导致的
    • 4、系统资源问题
    • 4、网络问题
    • 5、数据库数据量太大问题
  • 三、如何排查慢SQL
    • 1、show processlist;
    • 2、开启慢查询日志
  • 四、参考

一、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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 什么是CAP理论和BASE思想?
  • wpf prism 《1》、区域 、模块化
  • WPF中使用Echarts显示图表
  • zeppline如何配置用户登陆
  • Python使用zdppy_mysql操作MySQL和MariaDB数据库快速入门教程
  • PE文件结构详解(非常详细)
  • 【Leetcode:2024. 考试的最大困扰度 + 滑动窗口】
  • [易聊]软件项目测试报告
  • Java 面向对象编程的四个基本原则(封装、继承、多态和抽象),并给出一个简单的例子说明如何在 Java 中应用这些原则?
  • Postman中参数填写方式
  • FaceFormer嘴形同步论文复现
  • Web开发
  • 使用Python+docx+jieba+wordcloud给word文档生成词云图
  • Java18 设计模式
  • vue2.0+ts中默认demo组件
  • @angular/forms 源码解析之双向绑定
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • 2017-08-04 前端日报
  • Angular2开发踩坑系列-生产环境编译
  • C++类的相互关联
  • co模块的前端实现
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • Docker: 容器互访的三种方式
  • Java超时控制的实现
  • Java教程_软件开发基础
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • scala基础语法(二)
  • tab.js分享及浏览器兼容性问题汇总
  • uva 10370 Above Average
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 算法-图和图算法
  • 算法系列——算法入门之递归分而治之思想的实现
  • 与 ConTeXt MkIV 官方文档的接驳
  • 如何在招聘中考核.NET架构师
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (C++20) consteval立即函数
  • (LLM) 很笨
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (全注解开发)学习Spring-MVC的第三天
  • (十六)Flask之蓝图
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (原創) 未来三学期想要修的课 (日記)
  • (转)linux下的时间函数使用
  • .gitignore文件—git忽略文件
  • .net 4.0发布后不能正常显示图片问题
  • .net core 管理用户机密
  • .Net Core 生成管理员权限的应用程序
  • .net core 外观者设计模式 实现,多种支付选择
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)
  • .NET开发者必备的11款免费工具
  • .NET面试题解析(11)-SQL语言基础及数据库基本原理