暂无图片
分享
枫叶
2019-07-06
定时任务执行时间较长(存储过程游标循环太多)

定时任务调用存储过程,运行时间3个小时;存储过程中定义的多个游标;设置进程跟踪,检查到部分sql运行次数太多(超过万次),导致耗时太多;

看有什么可以优化的地方;

收藏
分享
5条回答
默认
最新
枫叶
暂无图片 评论
暂无图片 有用 0
枫叶
上传附件:tkprof0706.docx
暂无图片 评论
暂无图片 有用 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
枫叶

好的;谢谢;

暂无图片 评论
暂无图片 有用 0
文成
问题已关闭: 问题已经得到解决
暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
附件列表
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏