Sql server 等待延迟性能考虑

Sql server 等待延迟性能考虑,sql-server,database-trigger,Sql Server,Database Trigger,我在桌子上有一个跳跳虎,它可以执行多种操作。业务要求这些操作至少在预定义的时间间隔内进行,因此我计划使用以下方法: WAITFOR DELAY '00:00:05' 我想知道,如果在使用上述语句时考虑任何性能因素,会不会导致在触发器完成之前阻止表上的后续插入或更新,或者触发器会在当前作用域的上下文中运行 是否会导致在触发器完成之前阻止表上的后续插入或更新 是的,会的。触发器的整个主体在原始插入、更新或删除的事务上下文中执行。始终存在一个事务,可以是显式创建的事务,也可以是SQL Server自

我在桌子上有一个跳跳虎,它可以执行多种操作。业务要求这些操作至少在预定义的时间间隔内进行,因此我计划使用以下方法:

WAITFOR DELAY '00:00:05'
我想知道,如果在使用上述语句时考虑任何性能因素,会不会导致在触发器完成之前阻止表上的后续插入或更新,或者触发器会在当前作用域的上下文中运行

是否会导致在触发器完成之前阻止表上的后续插入或更新

是的,会的。触发器的整个主体在原始插入、更新或删除的事务上下文中执行。始终存在一个事务,可以是显式创建的事务,也可以是SQL Server自动提供的事务,它可能会自动提交

这就是为什么建议永远不要在触发器中放入任何慢的或可能慢的东西——您将保持原始事务和它所占用的任何锁更长时间处于活动状态

相反,我建议,如果有可能将您的新活动与原始触发器分离,您可以发送一条ServiceBroker消息,或者向SQL代理作业读取的表中添加一行,以查找要执行的新工作,或者其他内容,只需确保它是同一数据库的本地内容,并且速度很快


1通常,此建议是在访问外部资源时给出的,这些资源在访问时可能很快,但在出现故障时报告错误时可能非常慢。

谢谢您的回复。实际上,我使用的是一个具有DateTime列的队列表,我需要等待的原因是,应用程序从该表读取数据并基于FIFO处理消息。我可以在GETDATE开始的5秒内向该字段写入日期时间,我想这会解决我的问题。@MickWalker-是的,听起来确实更好。