WAITFOR DELAY性能注意事项

时间:2017-01-25 09:32:26

标签: sql-server database-trigger

我在桌子上有一个跳跳器,它执行多个操作。这些操作发生(至少)彼此之间的预定义时间间隔是业务要求,因此我计划使用以下内容:

WAITFOR DELAY '00:00:05'

我想知道在使用上述语句时我应该考虑哪些(如果有的话)性能注意事项,它会导致表上的后续插入或更新被阻塞,直到触发器完成,或者触发器是否会在触发器中运行当前范围的背景?

1 个答案:

答案 0 :(得分:1)

  

是否会导致表格上的后续插入或更新被阻止,直到触发完成

是的,是的。触发器的整个主体在原始插入,更新或删除的事务的上下文中执行。 (总是有一个事务,无论是您明确创建的还是SQL Server自动提供的事务,都可以自动提交。)

这就是为什么建议永远不要在触发器内放慢速(或者可能放慢 1 ) - 你要保留原始事务以及它已经存活的任何锁定更长时间。

相反,我建议,如果可能将新活动与原始触发器分离 - 您可以发送服务代理消息,或者向SQL代理作业读取的表中添加行以查找新工作做或其他事情 - 只要确保它是同一个数据库本地的东西并快速。

1 通常,这个建议是在访问外部资源的情况下给出的 - 当它们存在时可能会快速访问,但报告的速度可能非常慢什么东西坏了。