如何定位10TB数据查询错误?

2024-01-23 15:49:43 浏览数 (1)

问题:在SQL执行引擎侧对sort做了一些优化,集群机器从23台缩容18台之后,这个sql运行后出现了结果错误的问题,在原来23台以及其他规模的集群场景下没任何问题,数据出来不对了,幸亏这是个测试场景,于是便可以出debug包进行调试。 ​ ​思路:其中几个关键点。 ​ ​第一:数据不一致,这里指的是优化后的向量化执行引擎与优化前的向量化执行引擎的结果对比。 第二:集群规模发生了变更。 ​ ​所以基于这两点进行分析。 ​ 1.​首先通过debug包捞出计算后的数据,如果符合预期那么优化前后的数据应该是匹配的,数据规模是10TB,数据行数大约是1.3亿条,抓取多少条能分析出问题是一个比较重要的参数,于是设置了200进行对比,其结果如下:

图中左侧为正常数据,右侧为错误数据,可以看到的是丢了中间一部分数据,其余数据完全是对的,从sort算法的优化逻辑上来看,算法的bug率比较低。所以可以先pass掉优化算法问题,应该是下游数据输入问题?带这这个问题继续深入。

2.继续看第二点集群规模发生了变更,这导致了一个问题,plan发生了变更,由于这个优化功能是有开关的,如果下游的sort也走了这个优化就异常了,果不其然,集群缩容之后,plan下游多了一个sort,这个测试功能被异常进入,导致数据异常,这里恰好验证了前面的想法:数据输入侧有问题!

经过两个关键点的分析,快速改了一版,验证后,数据恢复正常。本次调试在10TB数据规模下才复现的问题着实令人棘手,不过还能怎么办呢?当攒点经验吧。

0 人点赞