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 |
blink planner 有这个问题吗?
jun su <[hidden email]> 于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 > |
hi godfrey,
我用了最新代码的blink没这个问题, 我看代码flink是先用hep然后进valcano, 而blink貌似没用hep, 我将hep代码注释后valcano的迭代次数会大幅减少, 语句嵌套10层基本在4000次左右能获取最佳方案,我再debug看下原因 godfrey he <[hidden email]> 于2020年9月22日周二 下午8:58写道: > blink planner 有这个问题吗? > > jun su <[hidden email]> 于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 |
hi godfrey,
刚看了下, blink应该也会用hep , 上文说错了 jun su <[hidden email]> 于2020年9月23日周三 上午9:19写道: > hi godfrey, > 我用了最新代码的blink没这个问题, 我看代码flink是先用hep然后进valcano, 而blink貌似没用hep, > 我将hep代码注释后valcano的迭代次数会大幅减少, 语句嵌套10层基本在4000次左右能获取最佳方案,我再debug看下原因 > > godfrey he <[hidden email]> 于2020年9月22日周二 下午8:58写道: > >> blink planner 有这个问题吗? >> >> jun su <[hidden email]> 于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 |
Hi Jun,
可能是old planner缺少一些rule导致遇到了corner case, blink planner之前解过一些类似的案例。 jun su <[hidden email]> 于2020年9月23日周三 上午9:53写道: > hi godfrey, > > 刚看了下, blink应该也会用hep , 上文说错了 > > jun su <[hidden email]> 于2020年9月23日周三 上午9:19写道: > > > hi godfrey, > > 我用了最新代码的blink没这个问题, 我看代码flink是先用hep然后进valcano, 而blink貌似没用hep, > > 我将hep代码注释后valcano的迭代次数会大幅减少, 语句嵌套10层基本在4000次左右能获取最佳方案,我再debug看下原因 > > > > godfrey he <[hidden email]> 于2020年9月22日周二 下午8:58写道: > > > >> blink planner 有这个问题吗? > >> > >> jun su <[hidden email]> 于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 > |
hi godfrey,
方便说下是哪些rule fix了这个问题么? 我对这个比较好奇 , 想看下是什么原因导致的 godfrey he <[hidden email]> 于2020年9月23日周三 上午10:09写道: > Hi Jun, > > 可能是old planner缺少一些rule导致遇到了corner case, > blink planner之前解过一些类似的案例。 > > jun su <[hidden email]> 于2020年9月23日周三 上午9:53写道: > > > hi godfrey, > > > > 刚看了下, blink应该也会用hep , 上文说错了 > > > > jun su <[hidden email]> 于2020年9月23日周三 上午9:19写道: > > > > > hi godfrey, > > > 我用了最新代码的blink没这个问题, 我看代码flink是先用hep然后进valcano, 而blink貌似没用hep, > > > 我将hep代码注释后valcano的迭代次数会大幅减少, 语句嵌套10层基本在4000次左右能获取最佳方案,我再debug看下原因 > > > > > > godfrey he <[hidden email]> 于2020年9月22日周二 下午8:58写道: > > > > > >> blink planner 有这个问题吗? > > >> > > >> jun su <[hidden email]> 于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 |
例如 calc merge rule,还有calc,agg等其他相关rule,点比较散。得具体看
jun su <[hidden email]> 于2020年9月23日周三 上午10:22写道: > hi godfrey, > 方便说下是哪些rule fix了这个问题么? 我对这个比较好奇 , 想看下是什么原因导致的 > > godfrey he <[hidden email]> 于2020年9月23日周三 上午10:09写道: > > > Hi Jun, > > > > 可能是old planner缺少一些rule导致遇到了corner case, > > blink planner之前解过一些类似的案例。 > > > > jun su <[hidden email]> 于2020年9月23日周三 上午9:53写道: > > > > > hi godfrey, > > > > > > 刚看了下, blink应该也会用hep , 上文说错了 > > > > > > jun su <[hidden email]> 于2020年9月23日周三 上午9:19写道: > > > > > > > hi godfrey, > > > > 我用了最新代码的blink没这个问题, 我看代码flink是先用hep然后进valcano, 而blink貌似没用hep, > > > > 我将hep代码注释后valcano的迭代次数会大幅减少, 语句嵌套10层基本在4000次左右能获取最佳方案,我再debug看下原因 > > > > > > > > godfrey he <[hidden email]> 于2020年9月22日周二 下午8:58写道: > > > > > > > >> blink planner 有这个问题吗? > > > >> > > > >> jun su <[hidden email]> 于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 > |
In reply to this post by jun su
应该是碰到节点 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 <[hidden email]>,写道: > hi godfrey, > 方便说下是哪些rule fix了这个问题么? 我对这个比较好奇 , 想看下是什么原因导致的 > > godfrey he <[hidden email]> 于2020年9月23日周三 上午10:09写道: > > > Hi Jun, > > > > 可能是old planner缺少一些rule导致遇到了corner case, > > blink planner之前解过一些类似的案例。 > > > > jun su <[hidden email]> 于2020年9月23日周三 上午9:53写道: > > > > > hi godfrey, > > > > > > 刚看了下, blink应该也会用hep , 上文说错了 > > > > > > jun su <[hidden email]> 于2020年9月23日周三 上午9:19写道: > > > > > > > hi godfrey, > > > > 我用了最新代码的blink没这个问题, 我看代码flink是先用hep然后进valcano, 而blink貌似没用hep, > > > > 我将hep代码注释后valcano的迭代次数会大幅减少, 语句嵌套10层基本在4000次左右能获取最佳方案,我再debug看下原因 > > > > > > > > godfrey he <[hidden email]> 于2020年9月22日周二 下午8:58写道: > > > > > > > > > blink planner 有这个问题吗? > > > > > > > > > > jun su <[hidden email]> 于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 |
hi danny & godfrey
看debug日志99%是CalcMergeRule , 我看blink用的是FlinkCalcMergeRule , 在matches方法里加了些对none-deterministic表达式的过滤,, 于是我将CalcMergeRule替换成FlinkCalcMergeRule, 并在FlinkRuleSets里做了更新 , 重跑后debug日志是99%是更新过的FlinkCalcMergeRule Danny Chan <[hidden email]> 于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 <[hidden email]>,写道: > > hi godfrey, > > 方便说下是哪些rule fix了这个问题么? 我对这个比较好奇 , 想看下是什么原因导致的 > > > > godfrey he <[hidden email]> 于2020年9月23日周三 上午10:09写道: > > > > > Hi Jun, > > > > > > 可能是old planner缺少一些rule导致遇到了corner case, > > > blink planner之前解过一些类似的案例。 > > > > > > jun su <[hidden email]> 于2020年9月23日周三 上午9:53写道: > > > > > > > hi godfrey, > > > > > > > > 刚看了下, blink应该也会用hep , 上文说错了 > > > > > > > > jun su <[hidden email]> 于2020年9月23日周三 上午9:19写道: > > > > > > > > > hi godfrey, > > > > > 我用了最新代码的blink没这个问题, 我看代码flink是先用hep然后进valcano, 而blink貌似没用hep, > > > > > 我将hep代码注释后valcano的迭代次数会大幅减少, 语句嵌套10层基本在4000次左右能获取最佳方案,我再debug看下原因 > > > > > > > > > > godfrey he <[hidden email]> 于2020年9月22日周二 下午8:58写道: > > > > > > > > > > > blink planner 有这个问题吗? > > > > > > > > > > > > jun su <[hidden email]> 于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 |
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 <[hidden email]>,写道: >>> hi godfrey, >>> 方便说下是哪些rule fix了这个问题么? 我对这个比较好奇 , 想看下是什么原因导致的 >>> >>> godfrey he <[hidden email]> 于2020年9月23日周三 上午10:09写道: >>> >>>> Hi Jun, >>>> >>>> 可能是old planner缺少一些rule导致遇到了corner case, >>>> blink planner之前解过一些类似的案例。 >>>> >>>> jun su <[hidden email]> 于2020年9月23日周三 上午9:53写道: >>>> >>>>> hi godfrey, >>>>> >>>>> 刚看了下, blink应该也会用hep , 上文说错了 >>>>> >>>>> jun su <[hidden email]> 于2020年9月23日周三 上午9:19写道: >>>>> >>>>>> hi godfrey, >>>>>> 我用了最新代码的blink没这个问题, 我看代码flink是先用hep然后进valcano, 而blink貌似没用hep, >>>>>> 我将hep代码注释后valcano的迭代次数会大幅减少, 语句嵌套10层基本在4000次左右能获取最佳方案,我再debug看下原因 >>>>>> >>>>>> godfrey he <[hidden email]> 于2020年9月22日周二 下午8:58写道: >>>>>> >>>>>>> blink planner 有这个问题吗? >>>>>>> >>>>>>> jun su <[hidden email]> 于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 |
Free forum by Nabble | Edit this page |