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

回复