2019-07-06
定时任务执行时间较长(存储过程游标循环太多)
定时任务调用存储过程,运行时间3个小时;存储过程中定义的多个游标;设置进程跟踪,检查到部分sql运行次数太多(超过万次),导致耗时太多;
看有什么可以优化的地方;
收藏
分享
5条回答
默认
最新
回答交流
提交
问题信息
请登录之后查看
附件列表
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
墨值悬赏
定时任务调用存储过程,运行时间3个小时;存储过程中定义的多个游标;设置进程跟踪,检查到部分sql运行次数太多(超过万次),导致耗时太多;
看有什么可以优化的地方;
评论
有用 0执行次数多,可能是业务需要,我看存储过程里是按照门店或者商品进行遍历的吧,看是否可以合并业务逻辑,不要循环回表那么多,或者将数据一次性 bulk collect到内存里进行内存操作,减少IO。
在很多sql的where子句中有很多排空的判断
and nvl(isrefer, 0) = 1 and nvl(isclose, 0) = 0 and nvl(dbsl, 0) < nvl(dhsl, 0) and nvl(dhsl, 0) > 0 and nvl(ExecOk, 0) <> 2 and nvl(IsLacked, 0) = 0 and nvl(IsAuditing, 0) = 1 and nvl(BillType, '0') = '1'
加上nvl之后,一方面效率会有问题,另一方面用不到索引
建议改写类似的sql,并根据需求添加组合索引,提高sql效率
评论
有用 0
墨值悬赏