MySQL 8.0.23上遇到一个FIND_IN_SET的BUG
本文为网友投稿。
作者:蓝树叶(成伟),运维工程师。
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相关推荐
- (一)win10下MySQL 8.0.23安装教程及简单测试
文章目录 (一)win10下MySQL 8.0.23安装教程及简单测试 1.MySQL官网下载 2.配置环境变量 3.命令行cmd安装MySQL 3.1 管理员权限运行cmd 3.2 数据库初始化 3 ...
- MySQL 8.0.23免安装版配置步骤
@C MySQL 8.0.23免安装版配置步骤 首先进入MySQL官网,链接: MySQL官网. 1.选择DOWNLOADS; 2.在页面最底端选择MySQL Community (GPL) Down ...
- mysql 8.0.23 安装配置方法
win10下mysql 8.0.23 安装配置方法图文教程 mysql 8.0.23 安装配置方法 一.下载mysql 二.环境配置: 三.安装: mysql 8.0.23 安装配置方法 本文为大家分 ...
- mysql被跑死_MySQL 8.0.23中复制架构从节点自动故障转移
接触MGR有一段时间了,MySQL 8.0.23的到来,基于MySQL Group Replicaion(MGR)的高可用架构又提供了新的架构思路.灾备机房的slave,如何更好地支持主机房的MGR? ...
- 新特性解读 | MySQL 8.0 对 limit 的优化
作者:杨奇龙 网名"北在南方",资深 DBA,主要负责数据库架构设计和运维平台开发工作,擅长数据库性能调优.故障诊断. 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不 ...
- 警惕参数变化,MySQL 8.0 升级避免再次踩坑
MySQL 8.0新特性专栏目录 <MySQL开发规范>过时了,视图查询性能提升了一万倍 你真的会用EXPLAIN么,SQL性能优化王者晋级之路 索引三剑客之降序索引和不可见索引 千呼万唤 ...
- mMySQL中触发器和游标的介绍与使用L8.0.23免安装版配置详细教程 msi安装超详细教程
文章来源: 学习通http://www.bdgxy.com/ 普学网http://www.boxinghulanban.cn/ 智学网http://www.jaxp.net/ 一.下载MySql,安装 ...
- MySQL性能基准测试对比:MySQL 5.7与MySQL 8.0
版权声明:本文由腾讯云数据库产品团队整理,页面原始内容来自于db weekly英文官网,若转载请注明出处.翻译目的在于传递更多全球最新数据库领域相关信息,并不意味着腾讯云数据库产品团队赞同其观点或证实 ...
- mysql 压力测试知乎_MySQL性能基准测试对比:MySQL 5.7与MySQL 8.0
版权声明:本文由腾讯云数据库产品团队整理,页面原始内容来自于db weekly英文官网,若转载请注明出处.翻译目的在于传递更多全球最新数据库领域相关信息,并不意味着腾讯云数据库产品团队赞同其观点或证实 ...
最新文章
- CodePush使用调研
- SharePoint 【架构系列】-- SharePoint的处理(Process)与执行模型(Trust Model) 01
- linux用的那国语言,在linux上可以使用什么变成语言
- nodejs实现文件上传
- Spring Cloud Alibaba —— Nacos Config 配置中心
- ssh(struts,spring,hibernate)开发的初步集成01--依赖
- 机器学习笔记(十六)——EM算法概述
- python创建控件,用 IronPython 创建和调用用户控件.doc
- CountDownLatch和Semaphore使用场景
- choose标签使用
- java计算机毕业设计HTML5“守护萌宠”网站设计与实现MyBatis+系统+LW文档+源码+调试部署
- C语言单元测试框架——CUnit
- 物联网+人工智能:发那科、思科、罗克韦尔自动化联合推出FIELD system
- 浪潮服务器账号,浪潮云云服务器配置
- 浅析移动旺旺特服号之无限扩展
- 正则表达式的g m $ ^ i
- 新西兰信报:移民规则变化 赴新中国学生人数减少
- MYSQL学习笔记(一)概述
- VSCode添加MSBuild
- 利用SQL进行水力计算