Hi > 看debug日志99%是CalcMergeRule , 我看blink用的是FlinkCalcMergeRule , > 在matches方法里加了些对none-deterministic表达式的过滤,, > 于是我将CalcMergeRule替换成FlinkCalcMergeRule, 并在FlinkRuleSets里做了更新 , > 重跑后debug日志是99%是更新过的FlinkCalcMergeRule
虽然debug日志看是CalcMergeRule一直在触发,但替换CalcMergeRule后也没有改变, 推测是其他rule引起的。 有特别的需要要使用old planner吗?old planner 社区计划在1.12里会被废弃了。 祝好 Leonard >> 应该是碰到节点 cycle 引用了,导致优化 rule 一直重复重复触发,可以将 debug 日志打开,看下是哪个 rule >> 被频繁触发了,之前修过一个类似的问题[1],可以参考下 >> >> [1] https://issues.apache.org/jira/browse/CALCITE-3121 >> >> Best, >> Danny Chan >> 在 2020年9月23日 +0800 AM10:23,jun su <sujun891...@gmail.com>,写道: >>> hi godfrey, >>> 方便说下是哪些rule fix了这个问题么? 我对这个比较好奇 , 想看下是什么原因导致的 >>> >>> godfrey he <godfre...@gmail.com> 于2020年9月23日周三 上午10:09写道: >>> >>>> Hi Jun, >>>> >>>> 可能是old planner缺少一些rule导致遇到了corner case, >>>> blink planner之前解过一些类似的案例。 >>>> >>>> jun su <sujun891...@gmail.com> 于2020年9月23日周三 上午9:53写道: >>>> >>>>> hi godfrey, >>>>> >>>>> 刚看了下, blink应该也会用hep , 上文说错了 >>>>> >>>>> jun su <sujun891...@gmail.com> 于2020年9月23日周三 上午9:19写道: >>>>> >>>>>> hi godfrey, >>>>>> 我用了最新代码的blink没这个问题, 我看代码flink是先用hep然后进valcano, 而blink貌似没用hep, >>>>>> 我将hep代码注释后valcano的迭代次数会大幅减少, 语句嵌套10层基本在4000次左右能获取最佳方案,我再debug看下原因 >>>>>> >>>>>> godfrey he <godfre...@gmail.com> 于2020年9月22日周二 下午8:58写道: >>>>>> >>>>>>> blink planner 有这个问题吗? >>>>>>> >>>>>>> jun su <sujun891...@gmail.com> 于2020年9月22日周二 下午3:27写道: >>>>>>> >>>>>>>> hi all, >>>>>>>> >>>>>>>> 环境: flink-1.9.2 flink table planner >>>>>>>> 现象: 代码一直在 VolcanoPlanner.findBestExp()方法中出不来, 直到OOM >>>>>>>> >>>>>>>> 发现在嵌套4层时 findBestExp方法中while(true)会循环3w多次后成功退出, 嵌套5层会达到几十万级别, >>>>> 导致进程OOM >>>>>>>> ----------------------------------------------- >>>>>>>> 代码: >>>>>>>> >>>>>>>> fbTableEnv.registerTableSource("source",orcTableSource) >>>>>>>> >>>>>>>> val select = fbTableEnv.sqlQuery("select >>>>>>>> Auth_Roles,Target_UserSid,Thread_ID,access_path,action from >> source >>>> ") >>>>>>>> >>>>>>>> fbTableEnv.registerTable("selectTable",select) >>>>>>>> >>>>>>>> val t1 = fbTableEnv.sqlQuery("select >>>>>>>> Auth_Roles,Target_UserSid,Thread_ID,access_path,action from >>>>> selectTable >>>>>>>> where Auth_Roles like 'a%'") >>>>>>>> fbTableEnv.registerTable("t1",t1) >>>>>>>> >>>>>>>> val t2 = fbTableEnv.sqlQuery("select >>>>>>>> Auth_Roles,Target_UserSid,Thread_ID,access_path,action from t1 >> where >>>>>>>> Target_UserSid= 'b'") >>>>>>>> fbTableEnv.registerTable("t2",t2) >>>>>>>> >>>>>>>> val t3 = fbTableEnv.sqlQuery("select >>>>>>>> Auth_Roles,Target_UserSid,Thread_ID,access_path,action from t2 >> where >>>>>>>> Thread_ID= 'c'") >>>>>>>> fbTableEnv.registerTable("t3",t3) >>>>>>>> >>>>>>>> val t4 = fbTableEnv.sqlQuery("select >>>>>>>> Auth_Roles,Target_UserSid,Thread_ID,access_path,action from t3 >> where >>>>>>>> access_path= 'd'") >>>>>>>> fbTableEnv.registerTable("t4",t4) >>>>>>>> >>>>>>>> val t5 = fbTableEnv.sqlQuery("select >>>>>>>> Auth_Roles,Target_UserSid,Thread_ID,access_path,action from t4 >> where >>>>>>>> action= 'e'") >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> Best, >>>>>>>> Jun Su >>>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> Best, >>>>>> Jun Su >>>>>> >>>>> >>>>> >>>>> -- >>>>> Best, >>>>> Jun Su >>>>> >>>> >>> >>> >>> -- >>> Best, >>> Jun Su >> > > > -- > Best, > Jun Su