等待延迟性能注意事项

WAITFOR DELAY Performance Considerations

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

WAITFOR DELAY '00:00:05'

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

will it cause subsequent inserts or updates on the table to be blocked until the trigger has completed

是的,是的。触发器的整个主体在原始插入、更新或删除的事务上下文中执行。 (总是有一个事务,要么是您明确创建的,要么是 SQL 服务器自动提供的,并且可能会自动提交)。

这就是为什么建议永远不要在触发器中放置任何慢速(或可能慢速1)的原因 - 你要保持原始事务和它已经采取的任何锁定活动更长时间。

相反,我建议,如果有可能将新的 activity 与原始触发器分离 - 您可以发送服务代理消息,或向 table 添加一行SQL 代理作业读取以寻找要执行的新工作或其他工作 - 只要确保它是同一数据库的本地工作并且速度很快。


1通常,此建议是在访问外部资源的上下文中给出的 - 访问外部资源可能很快当它们存在时 但当出现问题时,报告错误的速度可能会非常慢。