Vil*_*lx- 8 sql-server timeout
我有一个场景,有时用户选择正确的参数并进行一个需要几分钟或更长时间才能执行的查询.我不能阻止他选择这样的参数组合(这是非常合法的),所以我想在查询上设置超时.
请注意,我真的想要停止查询执行本身并回滚任何事务,否则它会占用大部分服务器资源.添加一个不耐烦的用户,他重新启动应用程序并再次尝试组合,并且你有一个灾难的配方(读取:sql server DoS).
可以这样做,怎么做?
据我所知,除了在客户端设置的命令或连接超时,没有办法通过查询基础的服务器来更改的查询超时.
您确实可以使用更改默认的600秒sp_configure,但这些是服务器作用域.
小智 7
嗯!您是否尝试过 LOCK_TIMEOUT
在运行查询之前记下它的
原始内容 运行
查询
后将其设置为您的查询 将其设置回原始值
SET LOCK_TIMEOUT 1800;
SELECT @@LOCK_TIMEOUT AS [Lock Timeout];
Run Code Online (Sandbox Code Playgroud)
我可能会建议两件事。
\n\n1)\n如果您的查询由于使用多个可能涉及锁的表而花费大量时间,那么一个相当快速的解决方案是使用“NoLock”提示运行查询。
\n\n只需Select * from YourTable WITH (NOLOCK)在所有表引用中添加一个即可防止查询阻塞并发事务。
2)如果你想确保所有查询的运行时间(让\xc2\xb4s说)少于5秒,那么你可以添加@talha建议的内容,这对我来说很有效
\n\n只需在执行的顶部添加
\n\nSET LOCK_TIMEOUT 5000; --5 seconds.\nRun Code Online (Sandbox Code Playgroud)\n\n这将导致你的查询需要少于 5 个或失败。然后你应该捕获异常并在需要时回滚。
\n\n希望能帮助到你。
\n