一条 SQL 查询报错:ERROR 1105 (HY000): runtime error: index out of range [2] with length 2

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:
【 TiDB 使用环境】
linux

【概述】 场景 + 问题概述
一条sql查询在4.0.0是正常的,在4.0.14出现报错
查询客户端报错:ERROR 1105 (HY000): runtime error: index out of range [2] with length 2
日志显示:panic in the recoverable goroutine
同样的sql在4.0.0没有出现报错,4.0.14报错,二者的explain不一致,explain analyze在4.0.14会报错
详细报错信息如下


【背景】 做过哪些操作

【现象】 业务和数据库现象

【问题】 当前遇到的问题

【业务影响】

【TiDB 版本】
4.0.14
【应用软件及版本】

【附件】 相关日志及配置信息

  • TiUP Cluster Display 信息
  • TiUP CLuster Edit config 信息

监控(https://metricstool.pingcap.com/)

  • TiDB-Overview Grafana监控
  • TiDB Grafana 监控
  • TiKV Grafana 监控
  • PD Grafana 监控
  • 对应模块日志(包含问题前后 1 小时日志)

若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

1 个赞

错误日志:

1 个赞

最好提供一下具体的 SQL TEXT,另外,能使用 hint 的方式,换一下关联方式吗(最好执行计划也发一下)

1 个赞

好的,我干完活给你回复

1 个赞

抱歉这么晚回复,因为需要对字段及表脱敏,不知道您这还能否看出问题来,如果看不出来的话我再想办法看看能否复现吧,主要想知道排查思路


2 个赞

如果不方便给完整的sql和表结构,可以尝试一个最小复现的步骤,多谢。

1 个赞

会不会是date函数的原因?
group by怎么是5个?不应该是3个么?有2个常量

1 个赞
- 如果你的问题已解决:
  - 如果你自己排查解决了,请附上你的解决方案,对自己的方案标记【对我有用】。
  - 如果别人帮助你解决了问题,那么请选择【最有价值】的回复,标记为【对我有用】,对帮助你的人,也是一种嘉奖和赞赏。
- 被标记了【对我有用】的问题,才能被搜索到,这样子也能帮助他人更高效地找到答案。标记了【对我有用】还能获得 5 积分,5 经验值。
- 如果你的问题还没有解决,请继续追问及反馈你遇到的问题。
1 个赞

终于破案了,是因为两个表的排序规则不一样,m1表采用了utf8mb4_bin的排序规则,m3表采用了utf8mb4_general_ci的排序规则,两个表的排序规则不一致,进行left join导致的这个bug,感谢上面所有大佬的支持,非常感谢

3 个赞

有几个疑问:1、你是怎么发现两个表的排序规则不一样的?
2、一般来说,建表和建索引都是使用数据库默认的字符集和排序规则吧?莫非你自己手工设置了字符集?

1.我觉得关联可能出现问题的几个方向,执行计划不对,浮点数精度不对,排序规则不一致等,一样样排查,最后发现了是排序规则的问题,新建了个相同排序规则的表就一样了

2.是走的库级别指定的字符集和排序规则,但是整体是从mysql迁移过来的,我入职前就是不同的排序规则,所以没做调整

以前还没遇到这样的问题,按说你们之前用MySQL,一般默认也是用默认的排序规则吧,看来应该是你之前的哥们指定了排序规则了。

嗯,估计是这样

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。