【TiDB 版本】 tidb5.0.0
【使用场景】
对一张约5亿行数据的表进行较多个维度分组汇总,并分页查询出汇总的结果
【问题描述】
如果分组的维度较少,tidb可以查询出来,如果维度较多,则出现 Out of Memory Quota的情况,如果将tidb_mem_quota_query设置较大,则可以查出,但是使用时间过长。
【问题截图】
group by 多字段导致 oom
【TiDB 版本】 tidb5.0.0
【使用场景】
对一张约5亿行数据的表进行较多个维度分组汇总,并分页查询出汇总的结果
【问题描述】
如果分组的维度较少,tidb可以查询出来,如果维度较多,则出现 Out of Memory Quota的情况,如果将tidb_mem_quota_query设置较大,则可以查出,但是使用时间过长。
【问题截图】
group by 多字段导致 oom
tidb_mem_quota_query 参数控制单条使用内存大小,防止 tidb server 因为非预期的使用内存而导致 OOM。
如果有此场景查询加速需求,可以尝试使用 tiflash 来加速查询。将 group by 下推到列存来进行加速
已经使用了tiflash,也用/*+ MEMORY_QUOTA(32 GB) */来控制内存大小了,但是groupby字段因为是动态的,如果过多的groupby就还是会oom
可以升级到高版本,高版本会有改善,另外,类似问题,可以发一下执行计划,方便定位原因
如果为了控制内存使用,可开启tmp-storage,用存储空间来避免内存过渡使用导致oom
已经升级了高版本v5.3.0,有一定提升,还有就是之前做汇总使用的是三个union分别汇总计算(相当于三分数据),现在使用case when进行汇总(只计算了一份数据),这样暂时可以满足我们的需求,不会发生oom
好的,我们后续再出现oom考虑使用tmp-storage
如果union,使用了相同的数据,还可考虑下推数据缓存。当然通过等写sql搞定一次访问是最好的。
此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。