hi danny & godfrey 看debug日志99%是CalcMergeRule , 我看blink用的是FlinkCalcMergeRule , 在matches方法里加了些对none-deterministic表达式的过滤,, 于是我将CalcMergeRule替换成FlinkCalcMergeRule, 并在FlinkRuleSets里做了更新 , 重跑后debug日志是99%是更新过的FlinkCalcMergeRule
Danny Chan <yuzhao....@gmail.com> 于2020年9月23日周三 下午12:32写道: > 应该是碰到节点 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