Mycat 聚合函数bug

5,190 total views, 3 views today

开发同事反应给我,通过Mycat 查询小值,遇到了一个bug。子查询中应该得到结果为5个10,整个查询结果应为10。但是这里为0,显然是错误的。

我测试了几遍,确实存在这个问题。向下直接捅到MySQL,在不同分片上执行相同的语句。
结果有两种。
1、子查询所在的分片中表中没有数据,那么返回值为NULL

或者条件过滤后,满足条件的行数为0,也是同样的结果。

2、子查询中过滤后有数据返回,那么结果是正常的10

到了这里,推测是返回NULL值的分片导致了Mycat最终返回错误结果的原因。

将返回为NULL的分片表中插入伪数据,使子查询返回条数不为0。再次在Mycat执行SQL,返回结果正确。看来还真是分片返回NULL导致了这个问题。

 

解决办法:
将mycat server.xml中的参数修改为0,这个问题解决

该参数开启,Mycat在堆外内存进行聚合函数,会发生上面的问题。
该参数关闭,Mycat则是在堆内内存进行聚合函数。

开发同事研究Mycat代码之后,表示堆外的那套代码有问题,所以产生了上面的错误。

One comment

发表评论

必填项已用*标注