我正试图解决以下注意事项的问题:
有这个存储的proc,它会在一些随机的日子超时,而其他的日子或重试之后可能会更快地完成。暂停设置1小时。当它完成时,它会在15分钟内完成。
下面我们已经注意到这个DB服务器-
然而,当我们在下一个数据库恢复周期后重试相同的proc时,相同的SP只在15分钟内完成。
当它完成的时候-
这里可能发生了什么,我如何进一步解决这一问题?我们已经共享了可以完成的代码级调优,但是DEVs更感兴趣的是为什么同一SP在15分钟内完成,失败可能是一周中的一天。
服务器级设置:
MAXDOP=8 CTOP=5
编辑--我们在SP中发现了一个特殊的语句,它往往是最慢的,花费了1小时时间的90%,在通过并行作业从多个表中选择数据之后,插入# (temptable)。
发布于 2021-08-11 17:23:33
CXPACKET等待最可能是由于索引扫描操作符(S)在SP的执行计划中,从特定的表(S)读取了很多行。索引扫描可能是并行的,一些线程正在等待其他线程的完成,因此CXPACKET等待类型。
可能发生的情况是,当SP完成时(不到15分钟),执行计划是不同的,读取较少的行或包含较少索引扫描,读取大量行。当SP超时,您看到CXPACKET 8小时时,执行计划可能包含更多索引扫描操作符,这些操作符读取大量行
当你回答我在评论中发布的问题时,我可以分享更多信息。
无论如何,您必须捕获存储过程的执行计划,查看执行计划在成功时与超时时的区别。
)。
或者,您可以增加超时设置,或者获得更好的硬件。
https://dba.stackexchange.com/questions/297845
复制相似问题