如何为同一触发器/存储过程管理多个查询计划

2020-08-19 08:59发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)嗨, Linux上的ASE ...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

Linux上的ASE 15.7.1。

周末结束时的维护工作(重组,更新统计信息),星期一用户开始工作,并且所有存储过程和触发器都将重新编译并获得新的查询计划。 一个触发器会获得2个不同的查询计划,并且性能会有很大不同。 使用强制索引重新创建触发器,现在只有一个计划,它可以正常工作。

出于好奇,我检查了有多少个存储的proc和触发器具有一个以上的查询计划,并且发现在维护作业运行两天后,有400多个具有两个或多个查询计划且性能差异很大的已编译对象。

ASE如何管理这些不同的计划? 有什么东西可以消除最糟糕的东西吗?

select * from(
select count(*)作为"数字",ExecutionTime/RequestCnt作为" averageTime",DBName,ObjectType,ObjectName来自monCachedProcedures,其中ObjectName不像" *%*"那样按DBName,ObjectType, ObjectName)a
其中数字>按DBName,ObjectType,ObjectName,averageTime的1顺序

number averageTime DBName ObjectType ObjectName
----------- ----------- ----------------- ------------- -------------------------------- ----- -------------------------

9 9 15 MEDUSA_PROD存储过程AvailabilityUnprocessedPoll
9 17 31504 MEDUSA_PROD存储过程AvailabilityUnprocessedPoll
9 19 44073 MEDUSA_PROD存储过程 AvailabilityUnprocessedPoll
9140600 MEDUSA_PROD存储过程AvailabilityUnprocessedPoll
9 334 1 MEDUSA_PROD存储过程AvailabilityUnprocessedPoll
9 2682 32 MEDUSA_PROD存储过程AvailabilityUnprocessedPoll
9 3169 17 MEDUSA_PROD存储过程AvailabilityUnprocessedPoll
9 7048 1 AvailabilityUnprocessedPoll
9 25417 2 MEDUSA_PROD存储过程AvailabilityUnprocessedPoll

我在上面编写了查询,看一下具有9个不同查询计划的存储过程示例,平均执行时间从9毫秒变为25秒,并且速度不是最快的选择。

我知道有dbcc deleteplan,但是它不受支持,我不喜欢在生产中使用它。 还有其他最佳做法吗? 每次维护作业运行时,程序或触发器是否可能开始缓慢运行? dba可以采取什么措施来防止这种情况发生?

几个问号只是为了给您更多有关同一问题的观点。

4条回答
SC_Yao
2020-08-19 09:18

回复:显示过程缓存中存储的proc的查询计划吗?

看起来应该可以使用monCachedProcedures中的PlanID来调用16.0 SP03 PL06和更高版本中的show_plan()函数。 调用语法为:

show_plan( [,])

https://help。 sap.com/viewer/791c41982ee345a19c4ec4b774222c4f/16.0.3.8/zh-CN/adca355a9d774e89a6850782044c9517.html?q=show_plan

一周热门 更多>