暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

gbase 执行 update 语句报错,HandleRow return error:Scalar sub-query return result more than one row

业务侧反馈update更新表报错

“Communications link failure“ 这个报错一般是因为结果集超过了1500行,因为这边有相关限制通过脱敏库跳转到gbase数据库,且查询的结果超过1500行不加limit就会报错。

 

但是这条sql是update,且跟业务沟通反馈他是直连数据库的不是通过脱敏库跳转。

 

先排查跟“Communications link failure“报错的参数,看是否是参数的问题。

根据自己了解到的一些案例来看,可能是跟两个参数有关。

wait_timeout(非交互连接超时时间,即 jdbc 连接)

interactive_timeout(交互连接超时时间,即客户端连接)配置,默认是 8 小时,8 小时内都没有访问则访问会被拒绝。

看一下数据库的参数设置

 

 

根据参数的值来看跟这两个参数应该没什么关系

此时原厂工程师建议看下有没有gbased或者gclusterd服务重启的情况发生,查看后发现gn节点的gbased没有重启过,gc节点的gcluster服务有重启。而且刚好是此sql执行的时间。发生这种情况基本可以确定是sql的问题。

进一步排查sql,以下sql表与字段已修改。

 

 

很简单的sql,将sql内的select语句拿出来单独执行也可以执行成功。

 

应该是语法的问题

自己建测试表插入几行数据

 

然后执行与问题sql同样的语法,发现有报错。

HandleRow return error:Scalar sub-query return result more than one row

 

因为结果集超过1个的报错。

似乎就是因为这个原因,原sql的select结果集是几千。

 

将结果限制为1个试试。

可以更新

在原sql限制结果为1,发现也可以。

将结果反馈给业务,原来update语句确实会遇到这样的情况,遇到了才会修改。但是这次的报错提示是“Communications link failure“,所以没想到是select的结果是多个的原因。

最后修改时间:2023-10-31 15:56:42
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论