MySQL 让你还用5.7 出事了吧,用着用着5.7崩了

2024年 7月 15日 48.6k 0

开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题,有需求都可以加群群内有各大数据库行业大咖,可以解决你的问题。加群请联系 liuaustin3 ,(共2310人左右 1 + 2 + 3 + 4 +5+6) 新人分配到6群,准备建立7 群。*(1 2 3 4 5 均没有空位了,请不要在问了谢谢)

MySQL 让你还用5.7 出事了吧,用着用着5.7崩了-1

最近群里一个知名的软件服务商的领导,说他的系统服务的客户很多还在用MySQL5.6,5.7 然后群里说还有用5.5的了。哎MySQL 的老版本的用户不少,大部分还在MySQL 5.7上转悠。说是升级的热情不高,当然这与ORACLE 对MySQL的8.0版本的“不负责”,有关,也与不少用户目前使用MySQL5.7并没有遇到问题有关。

但这里提示能升级MySQL的同学还是进来升级,MySQL到8.018版本以上(不包括8.029)。因为最近我们出现了一个严重的MySQL的故障,版本是MySQL 5.7.28,Official 版本。

系统已经持续运行了有5-6年了,没有问题,但突然一天CPU升高,接近100%,并且持续的高,我们抓取了慢查询日志,发现其中有一个SQL 与这个问题有关,随机我们进行了测试,执行计划完全走了索引,一个这样简单的SQL 竟然要90-120秒,这让我们不可思议。随即我们将SQL 在从库进行了测试,发现从库运行这个SQL的速度异常的快只要0.006秒。

select
  distinct RES.*,
  AR.ID_ as VAR_ID_,
  AR.NAME_ as VAR_NE_,
  AR._TYPE_ as V_TYPE_,
  AR._ as VAR_REV_,
  AR.C_INST_ID_ as VR_PC_ID_,
  AR.CUT_ID_ as VR_EXECUID_,
  AR.K_ID_ as R_SK_ID_,
  AR.EA_ID_ as VAR_BAY_ID_,
  AR.BLE_ as VAR_DLE_,
  AR.T_ as VR_XT_,
  AR.T2_ as VR_TET2_,
  AR.T_UPDD_TI_ as VAR_ST_TED_ME_,
  AR.G_ as V_LG_
from
  tcn.AC_HI_TST RE
  left outer join tcn.NST AR ON RE.PNST_ID_ = AR.EXON_ID_
  and VAR.TK_ID_ is null
WHERE
  RES.ID_ = '173878637'
order by
  VAR.LAST_UED_TIME_ asc
LIMIT
  20000 OFFSET 0;

MySQL 让你还用5.7 出事了吧,用着用着5.7崩了-2

这里最大的问题是他有主从库,主库是运行的是不OK的,但是从库运行是非常快的,同样的数据,同样的SQL,进行explain的时候也是同样的执行计划。

到底是为什么,通过show engine innodb status,和各种系统表也分析了当前写库是否有大事务,或者表被霸占,或大事务等情况,统统的没有,就是慢,慢,慢  fack!!!

MySQL 让你还用5.7 出事了吧,用着用着5.7崩了-3

冷静下来分析

1 主库和从库数据一致,语句一致,执行计划一致
2 在主库实际运行语句最快1分30秒 ,在从库运行0.005秒。

此时在想,如果是MySQL8 就好了,我们可以使用explain format = 多种显示的方式,并且还能trace 具体的执行计划,而不是在这里看着简单的执行计划,并看着业务部门在问到底怎么回事。在问题分析这块,MYSQL5.7就是一个傻子。

然后只能从语句上下手,尝试,语句中有两个点
1 ORDER BY
2 limit N,M

因为MySQL有一个致命的问题这在8.0后也有类似的问题,但在高版本将这个问题的参数默认给关闭了,ORDER BY LIMIT 执行效率的问题。

问题主要表现在  where condition order by A limit N 这样的语句,由于MYSQL5.7默认是打开 prefer_ordering_index 也就是在操作的时候,由于limit N 的值比较小,导致查询分析器去走ORDER BY 字段上的索引,而放弃更适合的索引。

摆在我面前的有几个方案

1  去设置optimizer_switch='prefer_ordering_index=OFF'
2  尝试添加一个比现在索引权重更大的索引 (需要看条件,不是每次都能行)
3  强制语句使用 hint

由于这个.28的版本比较老,记得应该是.33后的MySQL才可以添加 prefer_ordering_index参数所以第一个选择的方案不可以。

那么就需要尝试剩下的方案,我先尝试第三个方案,的确在强制hint index后,语句执行的速度┗|`O′|┛ 嗷,的一下子就快了,0.006秒,看来的确是和语句执行没有走正确的索引有关,配合监控中的执行语句的时候iops就超高,估计是是3千500万的表在进行全表的扫描。尝试了多次,只要语句执行不HINT,IOPS 就超高。

但是让开发去给你改语句,虽然开发说可以,但觉得对不起开发,这数据库的稳定性也忒差了,我尝试第二个方式,正好这个查询中在left join 中带有一个其他的条件,那么我就舱室重建索引,将原来的单字段的索引,改成复合的字段,这样从查询计划的实现上也是有利于数据查询的,在添加这个复合的索引后,再次尝试语句,速度也是┗|`O′|┛ 嗷的一下子蹦到 0.005秒。

先对这些方案,还是通过添加索引来进行问题的解决,让几方更能接受,后面打算对mysql的小版本进行升级,当然如果能推动往 MYSQL 8.018的版本上进行升级最好是 8.025就更好了,那么后续的一些DDL等操作也会更顺手,同时对于GROUP BY的语句执行的方式有了更大的优化,在低版本MYSQL无法运行的复杂的SQL,在8.025以上的版本运行也会更加的顺畅。

官方对此知识的文档

https://dev.mysql.com/doc/refman/5.7/en/limit-optimization.html

MySQL 让你还用5.7 出事了吧,用着用着5.7崩了-4

置顶文章:

PostgreSQL 稳定性平台 PG中文社区大会--杭州来去匆匆

云原生数据库是一场闹剧,还是数据库市场的程咬金

PolarDB 从节点Down机后,引起的主从节点强一致的争论
临时工说:数据库和周边做不好原因是产品经理的锅?读从OtterTune的倒下说起-有感

往期热门文章:

临时工说:  网友问35岁就淘汰,我刚入行DBA 怎么办?临时工访谈:问金融软件开发总监  哪些业务不用传统数据库PostgreSQL  15 16 小版本更新信息小结 版本更新是不是挤牙膏
临时工访谈:临时工 写了6年多公众号赚了多少钱?
MongoDB 的一张“大字报”  服务客户,欢迎DISS
MongoDB  聚合怎么写,更复杂的聚合案例
MySQL 8.0 小版本更新要点,那个小版本更稳定(8.0.24-8.0.37)
SQL SERVER 2022 针对缓存扫描和Query Store 的进步,可以考虑进行版本升级

有思想的人,在这个年代会很痛苦?躺平还是醒着都无所谓了

MYSQL 版本迁移带来 严重生产事故“的”分析

PolarDB  Serverless POC测试中有没有坑与发现的疑问
临时工访谈:PolarDB  Serverless  发现“大”问题了  之 灭妖记 续集
临时工访谈:庙小妖风大-PolarDB 组团镇妖 之 他们是第一
PolarDB for PostgreSQL  有意思吗?有意思呀
PolarDB  Serverless POC测试中有没有坑与发现的疑问

MySQL 的SQL引擎很差吗?由一个同学提出问题引出的实验

临时工访谈:从国产数据库 到 普罗大众的产品 !与在美国创业软件公司老板对话

PostgreSQL 如何通过工具来分析PG 内存泄露

MySQL 的SQL引擎很差吗?由一个同学提出问题引出的实验
临时工访谈:我很普通,但我也有生存的权利,大龄程序员 求职贴临时工说: 快速识别 “海洋贝壳类” 数据库方法速递临时工说:国产 数据库 销售人员  图鉴临时工说:DBA 是不是阻碍国产数据库发展的毒瘤 ,是不是?从国产DB老专家的一条留言开始 (其实更好看的是文章下方的留言)

感谢 老虎刘 刘老师 对 5月20日 SQL 问题纠正贴 ---PostgreSQL 同一种SQL为什么这样写会提升45%性能

PostgreSQL 同一种SQL为什么这样写会提升45%性能 --程序员和DBA思维方式不同决定

MongoDB 不是软柿子,想替换就替换

PostgreSQL  熊灿灿一句话够学半个月 之 KILL -9

MongoDB  挑战传统数据库聚合查询,干不死他们的

临时工说:国内数据库企业存活   “三板斧”

临时工访谈:庙小妖风大-PolarDB 组团镇妖 之 他们是第一  (阿里云组团PK笔者实录)

临时工访谈:金牌 “女” 销售从ORACLE 转到另类国产数据库 到底  为什么?

临时工访谈:无名氏意外到访-- 也祝你好运(管理者PUA DBA现场直播)

临时工说:搞数据库 光凭的是技术,那DBA的死多少次?

PostgreSQL  分组查询可以不进行全表扫描吗?速度提高上千倍?临时工说:分析当前经济形势下 DBA 被裁员的根因
PostgreSQL PG_DUMP 工作失败了怎么回事及如何处理MySQL 八怪(高老师)现场解决问题实录
PostgreSQL 为什么也不建议 RR隔离级别,MySQL别笑临时工访谈:OceanBase上海开大会,我们四个开小会 OB 国产数据库破局者
临时工说:OceanBase 到访,果然数据库的世界很卷,没边临时工访谈:恶意裁员后,一个国产数据库企业程序员的心声
临时工说:上云后给 我一个 不裁 DBA的理由PolarDB for PostgreSQL  有意思吗?有意思呀PostgreSQL   玩PG我们是认真的,vacuum 稳定性平台我们有了临时工说:裁员裁到 DBA 咋办  临时工教你 套路1 2 3PolarDB  搞那么多复杂磁盘计费的东西,抽筋了吗?临时工说:OceanBase 到访,果然数据库的世界很卷,没边MONGODB  ---- Austindatabases  历年文章合集MYSQL  --Austindatabases 历年文章合集POSTGRESQL --Austindatabaes 历年文章整理POLARDB  -- Ausitndatabases 历年的文章集合PostgreSQL  查询语句开发写不好是必然,不是PG的锅
SQL SERVER 如何实现UNDO REDO  和PostgreSQL 有近亲关系吗
MongoDB 2023纽约 MongoDB 大会 -- 我们怎么做的新一代引擎 SBE Mongodb 7.0双擎力量(译)
MongoDB 2023年度纽约 MongoDB 年度大会话题 -- MongoDB 数据模式与建模
MongoDB  双机热备那篇文章是  “毒”
MongoDB   会丢数据吗?在次补刀MongoDB  双机热备
临时工说:从人性的角度来分析为什么公司内MySQL 成为少数派,PolarDB 占领高处
POLARDB  到底打倒了谁  PPT 分享 (文字版)
PostgreSQL  字符集乌龙导致数据查询排序的问题,与 MySQL 稳定 "PG不稳定"
PostgreSQL  Patroni 3.0 新功能规划 2023年 纽约PG 大会 (音译)

Austindatabases 公众号,主要围绕数据库技术(PostgreSQL, MySQL, Mongodb, Redis, SqlServer,PolarDB, Oceanbase 等)和职业发展,国外数据库大会音译,国外大型IT信息类网站文章翻译,等,希望能和您共同发展。MySQL 让你还用5.7 出事了吧,用着用着5.7崩了-5

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论