本文为网友投稿。

作者:蓝树叶(成伟),运维工程师。

1、背景

在MySQL 8.0.23出现执行SQL超时的报错,而在MySQL8.0.18版本上未出现,故做个记录,以飨读者。

2、故障提要

在客户MySQL版本8.0.23,在部署客户测试环境时出现SQL执行超时报错。通过慢日志查询,找到对应的SQL。SQL如下:

SELECT * FROM t_dict WHERE FIND_IN_SET(id,(SELECT getDictChildrenNew((select id from t_dict where code = 'metadata_classify'and root_code = 'metadata_classify' ),(select code from t_dict where code = 'metadata_classify'and root_code = 'metadata_classify' ),(select root_code from t_dict where code = 'metadata_classify'and root_code = 'metadata_classify' ))))order by dict_level,dict_order asc;

这个SQL用到了一个自定义函数getDictChildrenNew。函数内容如下:(真实的账号使用user_name代替了,已脱敏)

CREATE DEFINER=`user_name`@`%` FUNCTION `user_name`.`getDictChildrenNew`(iid varchar(255),icode varchar(255),ircode varchar(255)) RETURNS varchar(5000) CHARSET utf8mb4READS SQL DATA
BEGIN
DECLARE oTemp VARCHAR(5000);
DECLARE oTempChild VARCHAR(5000);
DECLARE oTempId VARCHAR(5000);
DECLARE oRootCode VARCHAR(5000);SET oTemp = '';
SET oTempChild = icode;
SET oTempId = iid;
SET oRootCode = ircode;WHILE oTempChild IS NOT NULL
DO
SET oTemp = CONCAT(oTemp,',',oTempId);SELECT GROUP_CONCAT(ID) INTO oTempId
FROM t_dict
WHERE ROOT_CODE = oRootCode AND  FIND_IN_SET(PARENT_CODE,oTempChild);SELECT GROUP_CONCAT(CODE) INTO oTempChild
FROM t_dict
WHERE ROOT_CODE = oRootCode AND FIND_IN_SET(PARENT_CODE,oTempChild);END WHILE;
RETURN oTemp;
END

3、测试现象

我单独将where子句中这部分单独执行只需要122ms

SELECT getDictChildrenNew((select id from t_dict where code = 'metadata_classify' #58and root_code = 'metadata_classify' ),(select code from t_dict where code = 'metadata_classify' #metadata_classifyand root_code = 'metadata_classify' ),(select root_code from t_dict where code = 'metadata_classify' #metadata_classifyand root_code = 'metadata_classify' ))

或者我单独将这个查询的值以字符串形式作为FIND_IN_SET的第二个参数传入执行也很快。仅需79ms。

而我单独执行上面完整的SQL就会出现超时报错:(这为了演示,我就没有等到报错再截图了)

奇怪的是这个SQL在MySQL8.0.18上没有出现问题。能快速正常的计算出结果(67ms):

4、总结

为此,我们目前给客户的建议是降低MySQL版本。

之所以给客户用8.0.18的旧版,是因为我们的产品在旧版上进行了很多轮次的测试都是正常的。而这一次客户现场测试环境的MySQL版本是客户定的,我们产品没在这个版本跑过,所以才给出这个建议的。后续我会在新版做一轮测试看看。

此外,我们也会尝试去MySQL官网报告bug(#105277)。

《实战MGR》视频课程

视频已全部上线,这是免费视频,放在腾讯课堂平台上,共有500多人报名学习了。

目前是第一期内容,相信有很多不足,甚至错漏的地方,也欢迎各位不吝留言帮忙提建议、意见,帮忙改进完善,感谢。

戳此小程序即可直达

或用微信/QQ扫码

或复制链接在浏览器中打开 GreatSQL社区《实战MGR》https://ke.qq.com/course/3677969


文章推荐:

  • 面向金融级应用的GreatSQL正式开源

  • Changes in GreatSQL 8.0.25 (2021-8-26)

  • Percona XtraBackup 8.0.26实战大全

  • 一条sql语句慢在哪之抓包分析

  • MySQL中MGR中SECONDARY节点磁盘满,导致mysqld进程被OOM Killed

  • 简单测试MySQL 8.0.26 vs GreatSQL 8.0.25的MGR稳定性表现

  • 技术分享 | Update更新慢、死锁等问题的排查思路分享

  • 《叶问》36期,MySQL最多只能用到128个逻辑CPU,是真的吗

  • GreatSQL重磅特性,InnoDB并行并行查询优化测试

  • 在Linux下源码编译安装GreatSQL/MySQL


扫码加入GreatSQL/MGR交流QQ群

点击文末“阅读原文”直达老叶专栏

MySQL 8.0.23上遇到一个FIND_IN_SET的BUG相关推荐

  1. (一)win10下MySQL 8.0.23安装教程及简单测试

    文章目录 (一)win10下MySQL 8.0.23安装教程及简单测试 1.MySQL官网下载 2.配置环境变量 3.命令行cmd安装MySQL 3.1 管理员权限运行cmd 3.2 数据库初始化 3 ...

  2. MySQL 8.0.23免安装版配置步骤

    @C MySQL 8.0.23免安装版配置步骤 首先进入MySQL官网,链接: MySQL官网. 1.选择DOWNLOADS; 2.在页面最底端选择MySQL Community (GPL) Down ...

  3. mysql 8.0.23 安装配置方法

    win10下mysql 8.0.23 安装配置方法图文教程 mysql 8.0.23 安装配置方法 一.下载mysql 二.环境配置: 三.安装: mysql 8.0.23 安装配置方法 本文为大家分 ...

  4. mysql被跑死_MySQL 8.0.23中复制架构从节点自动故障转移

    接触MGR有一段时间了,MySQL 8.0.23的到来,基于MySQL Group Replicaion(MGR)的高可用架构又提供了新的架构思路.灾备机房的slave,如何更好地支持主机房的MGR? ...

  5. 新特性解读 | MySQL 8.0 对 limit 的优化

    作者:杨奇龙 网名"北在南方",资深 DBA,主要负责数据库架构设计和运维平台开发工作,擅长数据库性能调优.故障诊断. 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不 ...

  6. 警惕参数变化,MySQL 8.0 升级避免再次踩坑

    MySQL 8.0新特性专栏目录 <MySQL开发规范>过时了,视图查询性能提升了一万倍 你真的会用EXPLAIN么,SQL性能优化王者晋级之路 索引三剑客之降序索引和不可见索引 千呼万唤 ...

  7. mMySQL中触发器和游标的介绍与使用L8.0.23免安装版配置详细教程 msi安装超详细教程

    文章来源: 学习通http://www.bdgxy.com/ 普学网http://www.boxinghulanban.cn/ 智学网http://www.jaxp.net/ 一.下载MySql,安装 ...

  8. MySQL性能基准测试对比:MySQL 5.7与MySQL 8.0

    版权声明:本文由腾讯云数据库产品团队整理,页面原始内容来自于db weekly英文官网,若转载请注明出处.翻译目的在于传递更多全球最新数据库领域相关信息,并不意味着腾讯云数据库产品团队赞同其观点或证实 ...

  9. mysql 压力测试知乎_MySQL性能基准测试对比:MySQL 5.7与MySQL 8.0

    版权声明:本文由腾讯云数据库产品团队整理,页面原始内容来自于db weekly英文官网,若转载请注明出处.翻译目的在于传递更多全球最新数据库领域相关信息,并不意味着腾讯云数据库产品团队赞同其观点或证实 ...

最新文章

  1. CodePush使用调研
  2. SharePoint 【架构系列】-- SharePoint的处理(Process)与执行模型(Trust Model) 01
  3. linux用的那国语言,在linux上可以使用什么变成语言
  4. nodejs实现文件上传
  5. Spring Cloud Alibaba —— Nacos Config 配置中心
  6. ssh(struts,spring,hibernate)开发的初步集成01--依赖
  7. 机器学习笔记(十六)——EM算法概述
  8. python创建控件,用 IronPython 创建和调用用户控件.doc
  9. CountDownLatch和Semaphore使用场景
  10. choose标签使用
  11. java计算机毕业设计HTML5“守护萌宠”网站设计与实现MyBatis+系统+LW文档+源码+调试部署
  12. C语言单元测试框架——CUnit
  13. 物联网+人工智能:发那科、思科、罗克韦尔自动化联合推出FIELD system
  14. 浪潮服务器账号,浪潮云云服务器配置
  15. 浅析移动旺旺特服号之无限扩展
  16. 正则表达式的g m $ ^ i
  17. 新西兰信报:移民规则变化 赴新中国学生人数减少
  18. MYSQL学习笔记(一)概述
  19. VSCode添加MSBuild
  20. 利用SQL进行水力计算

热门文章

  1. 上海大学计算机学院同等学力申硕,上海大学同等学力申硕开设专业
  2. 【perl】文件测试符
  3. 漫谈程序员系列 让程序员蛋疼的那些事儿
  4. android 三星拍照,据说卖断货?我替大伙试试三星S10的拍照功能好不好用
  5. 网站被K,我该怎么办。
  6. R语言实现九连环等递归问题
  7. 万能充电器工作原理_百度知道
  8. [MIT公开课(计算机教育中缺失的一课)]10.大杂烩
  9. SCOM的基本概念的理解警报的处理
  10. ASP 如何读写一个文本文件