“超级攻略:如何快速排查和优化慢SQL,提升系统速度!“

慢查询指的是数据库中执行时间超过指定阈值的 SQL 语句。不同业务场景下,这个阈值通常各不相同。在我们公司内部,这个阈值被设定为 1 秒钟。也就是说,任何执行时间超过 1 秒的 SQL 语句都会被视为慢查询。

对慢查询进行问题排查通常分为以下几个步骤:

发现问题

一般而言,慢查询问题相对容易发现。如果有完善的监控体系,系统会定期统计慢 SQL 并通过报警方式提醒。

此外,如果使用了某些数据库中间件,例如 TDDL,它们通常会记录慢 SQL 的日志:

Cause: ERR-CODE: [TDDL-4202][ERR_SQL_QUERY_TIMEOUT] Slow query leads to a timeout exception, please contact DBA to check slow sql. SocketTimout:12000 ms,

如果只依赖 MySQL 本身的话

  1. 找到 MySQL 的配置文件 my.cnf(或者在 Windows 系统下可能是 my.ini),通常它们位于 MySQL 安装目录下的 etcconf 文件夹中。
  2. 启用慢查询日志功能:请找到以下配置项,并将其取消注释(如果已注释),确保以下行存在或添加到配置文件中:

slow_query_log = 1
slow_query_log_file = /path/to/slow-query.log
long_query_time = 1
  1. 保存配置文件后,重新启动 MySQL 服务以使配置生效。
  2. 查看慢查询日志:使用文本编辑器打开慢查询日志文件。日志文件的路径通常在配置文件中指定。例如,在 Linux 系统上,可以使用以下命令来查看慢查询日志文件:
sudo vi /var/log/mysql/mysql-slow.log

请将路径 /var/log/mysql/mysql-slow.log 替换为实际配置文件中指定的慢查询日志路径。
配置完毕后,MySQL 会将执行时间超过 long_query_time 设置的时间阈值的 SQL 语句记录到慢查询日志中。

如果有慢 SQL,内容如下:

# Time: 2023-06-04T12:00:00.123456Z
# User@Host: hollis[192.168.0.1]:3306
# Query_time: 2.345678  Lock_time: 0.012345 Rows_sent: 10  Rows_examined: 100
SET timestamp=1650000000;
SELECT * FROM orders WHERE status = 'pending' ORDER BY gmt_created DESC;

定位问题

在上述各种监控、报警和日志中,我们可以定位到具体的慢 SQL 语句,然后可以进一步分析为什么这个 SQL 语句执行缓慢,主要是排查以下几个可能的原因:

  1. 缺少索引:没有为查询涉及的列创建适当的索引,导致数据库需要全表扫描来找到匹配的行。
  2. 错误使用索引:使用了索引但不符合最左前缀原则,或者索引选择度不高(即索引列的唯一性不够高),导致数据库选择不到最优的索引执行查询。
  3. 查询字段过多:SELECT 语句中涉及的字段过多,增加了数据传输和处理的开销。
  4. 多次回表:查询执行过程中需要多次访问磁盘以获取额外的数据行,例如对主键的索引扫描后,需要再次根据主键进行查询。
  5. 多表连接:涉及多个表的 JOIN 操作,若 JOIN 条件不合适或者 JOIN 操作没有利用到索引,会导致性能下降。
  6. 深度分页:需要返回大量数据中的某一页,但是没有合适的方式来快速定位和获取这一页数据。
  7. 其他因素:还有一些其他可能的原因,例如复杂的子查询、数据库服务器负载高、SQL 语句写法不佳等。

针对这些问题,可以通过优化数据库表结构、添加合适的索引、优化 SQL 语句写法、调整数据库配置参数等方式来改进 SQL 查询的性能。

具体可参考文章:
提升 SQL 查询效率的终极指南

对于大多数情况下的慢 SQL 问题,通常可以通过执行计划分析找出根本原因,主要集中在索引和 JOIN 操作上。
关于执行计划分析和索引失效的详细内容,可以参考以下几篇文章,它们介绍得非常详细:

一篇文章聊透索引失效有哪些情况及如何解决

分析 SQL 执行计划,需要关注哪些重要信息

解决问题

定位问题后,解决问题就会变得容易起来。

实际上,最大的挑战不在于解决问题,而在于准确定位问题。因为一旦问题被准确定位,解决起来就变得相对简单。例如,缺少索引就添加索引,JOIN 操作过多就进行拆分。这里不再详细展开。

如有问题,欢迎微信搜索【码上遇见你】。

免费的Chat GPT可微信搜索【AI贝塔】进行体验,无限使用。

好了,本章节到此告一段落。希望对你有所帮助,祝学习顺利。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/45354.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue 使用腾讯地图 标点 自定义瓦片 折线配置

vue 使用腾讯地图 标点 自定义瓦片 折线配置 申请腾讯地图秘钥 key 腾讯地图开发者 https://lbs.qq.com/dev/console/application/mine 腾讯地图开发文档 https://lbs.qq.com/webApi/javascriptGL/glGuide/glOverview 添加 key 代码中引入 // 入口文件 index.html // 填…

【通信原理】其实QPSK就是一种特殊的QAM,即4-QAM

文章目录 幅度调制和相位调制QPSK(Quadrature Phase Shift Keying)QAM(Quadrature Amplitude Modulation)QPSK作为4-QAMQPSK(Quadrature Phase Shift Keying)和QAM(Quadrature Amplitude Modulation)都是数字调制技术,用于在无线信号中传输数据。要理解“QPSK其实就是…

新旧电脑数据转移方法

随着科技的发展和电脑性能的不断提升,许多用户在工作和生活中都需要更换新电脑。当我们购买了一台新电脑后,如何将旧电脑中的数据转移到新电脑上成许多用户关注的问题。本文将详细介绍几种有效的电脑数据转移方法,帮助大家顺利完成数据迁移。…

国产麒麟、uos在线编辑word文件并控制编辑区域(局部编辑)

windows系统也适用,该插件可同时支持windows和国产系统 在实际项目开发中,以下场景可能会用到Word局部编辑功能: 合同审批公文流转策划设计报告汇签单招投标(标书文件)其他,有模板且需要不同人员协作编辑…

06.TMS570LC43入门指南——中断操作

06.TMS570LC43入门指南——中断操作 文章目录 06.TMS570LC43入门指南——中断操作一、简介二、中断(VIM)介绍2.1 VIM架构2.2 CPU 中断处理2.3 VIM中断通道映射2.4 中断请求默认分配 三、项目实现3.1 硬件部分3.2 软件部分3.2.1 HALCoGen 配置3.2.2 CCS 配…

arm 版的 deb、rpm、AppImage 都有什么区别

qq arm 版的 deb、rpm 和 AppImage 格式之间存在几个关键区别。以下是对这些区别的详细解释: 包管理系统与兼容性: deb:是Debian及其衍生发行版(如Ubuntu)中使用的软件包格式。这些系统使用dpkg命令来管理deb包&#…

RK3588部署YOLOV8-seg的问题

在使用YOLOV8-seg训练出来的pt模型转为onnx的时候,利用以下仓库地址转。 git clone https://github.com/airockchip/ultralytics_yolov8.git 在修改ultralytics/cfg/default.yaml中的task,mode为model为自己需要的内容后, 执行以下语句 cd …

最新等保测评要求与企业应对策略

等保(等级保护)是中国网络安全的基本制度之一,旨在根据信息系统的安全级别,实施相应的保护措施。等保2.0在2019年底正式实施,它对信息系统进行了更细致的分类,并提出了更全面的安全要求。最新的等保测评要求…

vue3 学习笔记03 -- scss的使用

vue3 学习笔记03 – scss的使用 项目中结合 SCSS 可以很方便地管理样式 安装依赖 npm install -D sass sass-loader配置scss支持 export default defineConfig({plugins: [vue()],css: {preprocessorOptions: {//define global scss variablescss: {javascriptEnabled: true,…

在Linux上搭建服务器之综合实验(web,dns,防火墙,SELinux)

其实验简图如下: 解读: 本实验需要完成4部分内容,web服务器的搭建,主从dns服务器的搭建,防火墙的开启,以及SELinux设置为强制模式。 首先dns主服务器上配置web服务(其中我本机的IP为192.168.5.…

Memcached故障恢复秘籍:构建弹性缓存系统

标题:Memcached故障恢复秘籍:构建弹性缓存系统 在分布式缓存系统中,Memcached的稳定性和可靠性至关重要。故障恢复机制确保了在面对节点故障或网络问题时,Memcached能够快速恢复正常运行。本文将深入探讨Memcached的故障恢复机制…

thinkphp 生成邀请推广二维码,保存到服务器并接口返回给前端

根据每个人生成自己的二维码图片,接口返回二维码图片地址 生成在服务器的二维码图片 控制器 public function createUserQRcode(){$uid = input(uid);if

深度学习编码解码结构-以及kreas简单实现

图像分割中的编码解码结构(Encoder-Decoder Model)是一种广泛应用的网络架构,它有效地结合了特征提取(编码)和分割结果生成(解码)两个过程。以下是对图像分割中编码解码结构的详细解析&#xff…

通过vagrant与VirtualBox 创建虚拟机

1.下载vagrant与VirtualBox【windows版本案例】 1.1 vagrant 下载地址 【按需下载】 https://developer.hashicorp.com/vagrant/install?product_intentvagranthttps://developer.hashicorp.com/vagrant/install?product_intentvagrant 1.2 VirtualBox 下载地址 【按需下载…

lvs集群、NAT模式和DR模式、keepalive

目录 lvs集群概念 集群的类型:三种类型 系统可靠性指标 lvs集群中的术语 lvs的工作方式 NAT模式 lvs的工具 算法 实验 数据流向 步骤 一 、调度器配置(test1 192.168.233.10) 二、RS配置(nginx1和nginx2)…

设计模式使用场景实现示例及优缺点(结构型模式——桥接模式)

结构型模式 桥接模式(Bridge Pattern) 桥接模式(Bridge Pattern) 也称为桥梁模式、接口模式或者柄体模式,是将抽象部分与它的具体实现部分分离,使它们都可以独立地变化,属于结构型模式。桥接模…

项目开源能够带来什么?从中得到了什么?

开源软件项目的发展趋势和参与经验是一个多维度的话题,涉及技术进步、经济影响、社区动态以及个人成长等多个层面。以下是针对当前开源项目发展趋势的分析,以及参与开源项目时可能获得的经验和收获。 当前开源项目的发展趋势 技术领域的渗透加深&#x…

android项目实战之加载h5音乐页面,退出后销毁资源

在Android开发中,使用Fragment加载HTML5页面(通常是通过WebView)来播放音乐。 1. 加载资源 webView.setWebViewClient(new WebViewClient());webView.setWebChromeClient(new WebChromeClient());String url"";//改成你的页面链接…

物理层与数据通信基础:构建稳定网络的关键

本章主要讨论物理层的基本概念、数据通信的基础知识、几种常用的信道复用技术以及互联网接入技术。对于具备通信基础知识的读者,可以有选择地学习本章内容。 本章重点内容 物理层的任务数据通信的基本概念常用的信道复用技术常用的互联网接入技术 2.1 物理层的基…

深入理解FFmpeg--libavformat接口使用(一)

libavformat(lavf)是一个用于处理各种媒体容器格式的库。它的主要两个目的是去复用(即将媒体文件拆分为组件流)和复用的反向过程(以指定的容器格式写入提供的数据)。它还有一个I/O模块,支持多种…