【极客日常】慢查询的风险治理思路

在线上环境运维过程中,我们通常需要治理慢查询的风险。慢查询会引起DB性能问题,并且当线上环境流量较大的情况下,就会出现因大量慢查询堆积导致DB被打挂的情况。因此,本篇文章分享一下慢查询的风险治理思路。

首先,我们需要知道什么情况下会出现慢查询。通常对于大表,未正确引用索引导致全表扫描,就会出现慢查询。慢查询出现也会经历从无到有的过程,而为何从无到有,就涉及到业务变更。以下几种业务变更场景就有可能导致慢查询的产生:

  • 业务代码变更:代码逻辑没有正确引用索引
  • DML变更:WHERE条件没有正确引用索引
  • DDL索引变更:线上代码还引用原来的索引,导致实际索引未引用正确

慢查询的特征,从业务视角是DB响应速度变慢,而从DB视角是性能占用变大。从事后排查的角度,以MySQL为例,当变更后疑似发生慢查询时,我们可以结合Slow Query Log与mysqldumpslow来查看具体是哪些查询语句出现了慢查询。

之后,我们才需要针对可能出现慢查询的场景,设定预防的手段,尽可能避免事后止损。针对上述几种变更风险,我们可以各个击破:

  • 业务代码变更:代码引用DB扫描、线下查询治理
  • DML变更:EXPLAIN
  • DDL索引变更:代码引用DB扫描、线下查询治理

DML变更的情况比较好解。我们可以通过EXPLAIN的手段解析DML(查询逻辑)预期会使用到的索引、扫描行数和影响行数。如果查询的是大表,并且没有引用索引,或者扫描/影响行数过高,则需要注意真实执行时候,可能会造成慢查影响。

业务代码或DDL索引变更的情况,则需要把变更内容扫描和线下治理关联上,来确定当次变更是否有风险。在业务代码线下测试的过程中,我们可以通过比如提取ORM-Log的方式解析一些先下代码生成的SQL,然后放到线上库EXPLAIN,从而发现线下变更可能导致线上慢查的一些case。在代码变更发布到线上的时候,一方面可以通过分析代码引用来判断代码是否正确引用索引,另一方面也可以再次确认线下发现的SQL风险是否已经确认修复,从而避免风险夹带到线上。DDL索引变更同理,在执行DDL前,也可以通过血缘关系找到上游的服务,根据服务代码历史的分析结果以及线下提取SQL的记录,来判断变更后会否出现索引未正确引用的情况。

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

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

相关文章

Matlab二维绘图

低级绘图命令line 有什么点就点哪里,然后连起来,没什么细节,不光滑,所以基本不会用到。 x0:0.2*pi:2*pi; ysin(x); line(x,y);%画一条sin函数线 line([-5,5],[2,2]);%画一条水平线 line([5,5],[0,2]);%画一条竖线 高级绘图命令…

一文搞懂MCU RAM的分配

一文搞懂MCU RAM的分配 文章目录 一文搞懂MCU RAM的分配1. 前言2. 数据段含义2.1 Program Size解析 3. 局部变量、全局变量、常量如何占用 RAM?3.1 栈大小Stack_Size 与 堆大小Heap_Size3.2 验证栈大小设置,对程序编译的影响3.3 验证局部变量RAM分配3.4 验证全局变…

Mac系统安装PicGo时打开报错:文件已损坏

目录 一、前言二、解决方案三、结尾 一、前言 我们在安装某些第三方开发者开发的应用时,无法在 Mac 上运行,提示已经损坏,报以下错误:Mac系统安装PicGo时打开报错:文件已损坏,您应该将它移到废纸篓 二、解决…

LeetCode 2807.在链表中插入最大公约数

【LetMeFly】2807.在链表中插入最大公约数 力扣题目链接:https://leetcode.cn/problems/insert-greatest-common-divisors-in-linked-list/ 给你一个链表的头 head ,每个结点包含一个整数值。 在相邻结点之间,请你插入一个新的结点&#x…

DQL命令查询数据(三)

本课目标 掌握MySQL的多表查询 SQL语句的综合应用 多表连接查询 通过各个表之间共同列的关联性(例如:外键)来查询的 分类: 内连接(INNER JOIN) ,可简写为 JOIN;左外连接(LEFT OUTER JOIN),…

Java技术栈 —— Hadoop入门(一)

Java技术栈 —— Hadoop入门(一) 一、Hadoop第一印象二、安装Hadoop三、Hadoop解析3.1 Hadoop生态介绍3.1.1 MapReduce - 核心组件3.1.2 HDFS - 核心组件3.1.3 YARN - 核心组件3.1.4 其它组件3.1.4.1 HBase3.1.4.2 Hive3.1.4.3 Spark 一、Hadoop第一印象…

【Project】TPC-Online Module (manuscript_2024-01-07)

PRD正文 一、概述 本模块实现隧道点云数据的线上汇总和可视化。用户可以通过注册和登录功能进行身份验证,然后上传原始隧道点云数据和经过处理的数据到后台服务器。该模块提供数据查询、筛选和可视化等操作,同时支持对指定里程的分段显示和点云颜色更改…

小游戏实战丨基于PyGame的消消乐小游戏

文章目录 写在前面PyGame消消乐注意事项系列文章写在后面 写在前面 本期内容:基于pygame实现喜羊羊与灰太狼版消消乐小游戏 下载地址:https://download.csdn.net/download/m0_68111267/88700193 实验环境 python3.11及以上pycharmpygame 安装pygame…

回溯算法part01 算法

回溯算法part01 今日内容: ● 理论基础 ● 77. 组合 1.LeetCode77. 组合 https://leetcode.cn/problems/combinations/ 模板 //回溯算法模板void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择:本层集合中元素(树中节…

西电期末1027.判断同构数

一.题目 二.分析与思路 不用把他转成字符串再转成数字之类的&#xff0c;用数学解决就好&#xff01;找出一个数的最后位就是将其对求余啊&#xff0c;找一个数有几位以前也有过啊&#xff0c;那不就过了嘛&#xff01; 三.代码实现 #include<bits/stdc.h>//万能头 in…

模板元编程简介

从引入 template 关键字开始&#xff0c;C里就出现了泛型编程&#xff0c;而又泛型编程衍生出的模板元编程&#xff08;template meta_programming&#xff0c;简称“元编程”&#xff09;则是众多编程范式中最复杂、最强大和最具有权威的一种。所谓“元编程”——metaprogramm…

Keil C51的编译器限制

编译器限制 Cx51 编译器体现了下面列出的一些已知限制。在大多数情况下&#xff0c;对 C 语言的组件没有限制;例如&#xff0c;您可以在 switch 块中指定无限数量的符号或 case 语句。如果有足够的地址空间&#xff0c;则可以定义数千个符号。 最多支持对任何标准数据类型的 …

二叉树的经典算法(算法村第八关青铜挑战)

二叉树里的双指针 所谓的双指针就是定义了两个变量&#xff0c;在二叉树中有需要至少定义两个变量才能解决问题。这两个指针可能针对一棵树&#xff0c;也可能针对两棵树&#xff0c;姑且也称之为“双指针”。这些问题一般与对称、反转和合并等类型题相关。 判断两棵树是否相…

Python:tqdm模块详解

tqdm 是一个用于在 Python 中显示进度条的模块&#xff0c;用于在循环或迭代过程中展示任务的进度。 1. 安装 首先&#xff0c;你可以通过 pip 安装 tqdm 模块&#xff1a; pip install tqdm2. 基本使用方法 在 Python 中使用 tqdm &#xff0c;只需将你的迭代对象传递给 tqd…

【Linux】之搭建 PostgreSQL 环境

前言 在 Linux 系统下安装 PostgreSQL&#xff0c;可以选择快捷方便的 Docker 安装&#xff0c;但正常的服务器都是直接原生安装的&#xff0c;所以&#xff0c;这里我将讲解如何正常安装 PostgreSQL 以及安装之后的一些配置。如果想了解 Docker 安装的话&#xff0c;可以查看我…

竞赛练一练 第27期:GESP和电子学会相关题目练习

GESP一级2023.03_小猫捉老鼠 1. 准备工作 (1)导入背景Room 2; (2)删除默认小猫角色,导入角色Mouse1、Cat 2。 2. 功能实现 (1)点击绿旗,老鼠出现在随机位置; (2)通过键盘的“↑”、“↓”、“←”、“→”键来控制小猫行走,每按一次,移动5步; (3)小猫在…

使用openCV进行图像处理

使用 openCV进行图像处理 使用 openCV进行图像处理&#xff0c;又名&#xff1a;学习计算机视觉理论&#xff0c;做 demo(第3 天&#xff09; 目录 2.1 图像模糊 2.1.1 均值滤波2.1.2 中值滤波2.1.3 高斯滤波2.1.4 案例实现 2.2 图像锐化 2.2.1 图像锐化简介2.2.2 案例实现 …

Spring依赖注入的魔法:深入DI的实现原理【beans 五】

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 Spring依赖注入的魔法&#xff1a;深入DI的实现原理【beans 五】 前言DI的基本概念基本概念&#xff1a;为什么使用依赖注入&#xff1a; 构造器注入构造器注入的基本概念&#xff1a;示例&#xff1a…

laravel-admin之 浏览器自动填充密码(如果需要渲染数据库密码的话,首先确认数据库密码是否可以逆向解密)

参考 https://blog.51cto.com/u_10401840/5180106 为什么浏览器端保存的密码一直自动写入到$form->password 解决办法 2、在页面进入的时候&#xff0c;默认表单的type值为text&#xff1b;推荐指数&#xff1a;2颗星 5、设置表单的readonly属性;推荐指数&#xff1a;4颗…

实习遇到问题备忘录

1.Hutool工具包的DB Hutool学习 —— 数据库 - db &#xff08;一&#xff09;Db简单操作 - 简书 (jianshu.com) 2.Consumer函数接口 Java 常用函数式接口之Consumer接口 - LeeHua - 博客园 (cnblogs.com) 3.sql高级用法merge into SQL高级知识——MERGE INTO - 知乎 (zhi…