GBase 8a
其他
文章

如何通过trace判断发生了笛卡尔积

发表于2025-12-25 11:05:2428次浏览2个评论

在Join里发生笛卡尔积,可能是因为执行计划不合适,各个表join顺序不合理造成的,造成结果集过大

出现的现象有时会直接在trace里报错“too many tuples"

有时会执行极慢

在one -pass hash join里, 如果看到文件分片数过多(如大于10万),且长时间不出结果,则也可能是出现了笛卡尔积

Begin one-pass hash partitioning: divide xxx  tuples into xxx parts. 

 

例如:

traverse dim: 150000000 tuples, match dim: 24002640460 tuples    行号过多

 

 

手动join顺序调整,如果集群自动评估出来的顺序不合理,可以使用hint的方式强制按书写顺序执行

单机设置 _gbase_disable_condition_reorder=2 后可以保证单机接收到的指令不改变顺序

同时集群层书写sql时需要加hint

评论

登录后才可以发表评论
用户头像
levvel发表于 4个月前
少年易学老难成,一寸光阴不可轻
曾浩轩发表于 2个月前
闪闪发光