MySQL线上慢SQL问题分析处理小记

相同数据量表结构,线上执行12s 本地执行0.1s过程分析

1. 慢SQL信息

	SELECT t1.id,t2.idFROM t_platform_target_standard_target_index t1LEFT JOIN t_platform_target_standard t2 ON t1.target_number = t2.target_numberWHERE t1.delete_flag = 0 AND t2.user_num = 'user001'  AND t2.dimension = 5AND t1.classify_index_number IN  (  'TA-001',...省略大概20个记录
)

2. 确认环境及MySQL配置是否优化

线上本地
服务器信息image.pngimage.png
SQL执行时间12S0.1S
MySQL版本5.6.445.7.27-log
数据量及索引情况线上表拷贝至本地,所以表与索引一致

  看着服务器差距不是太大,于是排查配置,发现线上无任何配置,开始优化配置
关闭Selinux,效果不明显。加上一些Mysq基础配置优化如下, 其中innodb_buffer_pool_size 影响最大。时间降至8s ,同时可以排除是硬件问题。

#具体参数大小,请根据服务器配置做调整
innodb_buffer_pool_size = 10G 
max_connections=1000 
skip_name_resolve = 1
transaction_isolation = READ-COMMITTED
group_concat_max_len = 102400
tmp_table_size = 1342177280
max_heap_table_size = 1342177280
binlog_cache_size = 524288

3. 分析执行计划

  以为同样的数据与索引,执行计划应该是一模一样的,但是走的索引不同发现问题。
  t1数据量为900549,t2数据量为55311,两表索引情况如下。
t1索引情况
t2索引情况
执行计划分析情况
本地:
image.png
线上:
image.png
  两个环境居然走的索引不一样!本地,只走了一个t1的target_number索引,而且先是t2(小表)后是t1(大表),既然本地快,那就让线上索引跟本地一致。

4. 修改索引

  删除idx_classify 索引,执行计划分析如下。查询时间8.734s ,又走了classify_index_number索引,无效果。
image.png
  继续删除classify_index_number索引,执行计划分析如下。查询时间为0.095s! 索引顺序与执行索引与本地一致,问题解决。
image.png

总结

  MySQL版本不同导致旧版本的MySQL走了错误的索引,查询时间奇慢。条件允许的情况下升级MySQL好处还是很多的,会解决老版本的安全漏洞,同时避免此类索引优化错误的问题,更好的索引选择也会带来更高的效率。
  不是所有慢SQL都是句加索引就能解决的,排除环境问题的情况下,要结合表结构设计、数据量、SQL,修改或创建索引。
  索引名创建需规范
Java开发手册 索引规约对命名要求
Java开发手册的很多要求,看似简单但都是经验的血泪史,遵守的话能减少很多不必要的问题。

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

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

相关文章

socket实现视频通话-WebRTC

最近喜欢研究视频流,所以思考了双向通信socket,接下来我们就一起来看看本地如何实现双向视频通讯的功能吧~ 客户端获取视频流 首先思考如何获取视频流呢? 其实跟录音的功能差不多,都是查询电脑上是否有媒体设备,如果…

工业相机如何实现实时和本地Raw格式图像和Bitmap格式图像的保存和相互转换(C#代码,UI界面版)

工业相机如何实现实时和本地Raw图像和Bitmap图像的保存和相互转换(C#代码,UI界面版) 工业相机图像格式工业相机实现Raw图像和Bitmap图像的保存和转换的技术背景在相机SDK中获取图像转换图像的代码分析工业相机回调函数里保存Bitmap图像数据工…

太阳系三体模拟器

介绍 《三体》是刘慈欣创作的长篇科幻小说,文中提到的三体问题比较复杂和无解。 该项目代码就是利用 Python 来模拟三体的运行,此项目代码完全共享,欢迎下载。 我们可以自己通过调整天体的初始坐标、质量和矢量速度等等参数来自定义各种场景…

解决Golang WriteHeader设置后,Content-Type失效的问题

场景 最近笔者在研究web框架过程中,发现了一个响应类型的问题,困扰许久,原因就是设置了响应状态码后,然后设置响应类型为application/json。在实际请求后,响应类型变成了text/plain; charsetutf-8格式。 问题解决&…

RPA 培训前期准备指南——安装Uibot(RPA设计软件)

目录 一、电脑环境要求 二、所需的软件 2.1 办公软件 Office 版本: 2.2 Chrome 谷歌浏览器: 2.3 钉钉软件:官网下载 2.4 UiBot Creator 机器人流程自动化软件及 Chrome 扩展 三、UiBot Creator 安装与注册说明 (1&#xf…

公网ip数字证书申请流程

SSL数字证书是一种安全通信协议,它使用加密技术来保护在网络上传输的数据的机密性和完整性。当一个网站使用SSL数字证书时,它可以在浏览器和网站之间建立一条加密通道,确保用户在网站上输入的信息,如用户名、密码、信用卡信息等&a…

Halcon顶帽运算top_hat

Halcon顶帽运算 顶帽运算的原理是用原始的二值图像减去开运算的图像。开运算的目的是“移除”某些局部像素,如去毛边、断开相邻的边缘等。而顶帽运算正是用来提取这些被移除的部分。图(a)为从二值图像中提取出的亮的区域,可见有一…

什么?想学Go语言的人有福了?

最新好多小伙伴想学习云原生,但是都不知道怎么去学,我建议他们先去学一下G语言,作为云原生基础语言。 但是告诉我说找不到Go语言学习资料??? 好嘛,我连夜整理了几十本Go语言学习的pdf资料&…

【C#】知识点实践序列之Lock简单解决并发引起数据重复问题

欢迎来到《小5讲堂之知识点实践序列》文章,大家好,我是全栈小5。 这是2024年第3篇文章,此篇文章是C#知识点实践序列文章,博主能力有限,理解水平有限,若有不对之处望指正! 本篇在Lock锁定代码块基…

.NET DevOps 接入指南 | 1. GitLab 安装

引言 容器、DevOps和微服务被称为驱动云原生快速发展的三架马车。而DevOps是其中非常重要的一环,DevOps 是由Developers(Dev)和Operations(Ops)两个单词简称组成,中文直译就是“开发运维一体化”。 DevOps…

SpringBoot+SSM项目实战 苍穹外卖(08) 用户下单支付 内网穿透cpolar软件 绕开微信支付实现

继续上一节的内容,本节导入地址簿功能代码,并实现用户下单和订单支付功能。 这里写目录标题 导入地址簿功能代码接口分析代码实现 用户下单接口分析代码实现 订单支付内网穿透——cpolar软件代码导入绕开微信支付实现 导入地址簿功能代码 地址簿&#x…

12.31信号位宽转换(整数,非整数),时钟分频(奇数,偶数,任意小数,占空比),自动售货机(1,2),游戏机

非整数倍数据位宽转换8to12 所谓非整数倍,就是利用一个cnt去周期性决定寄存器里怎么输出,这个cnt的值,是最小公倍数 寄存器就正常的寄存,怎么输入怎么寄存 timescale 1ns/1nsmodule width_8to12(input clk , input…