如果需要的时间超过指定的秒数,我希望能够中止特定的sql语句。我怎样才能做到这一点?
例如,我想做类似的事情:
SET NextStatementTimeOutSeconds = 60
SELECT * FROM MyTable
IF @@LastStatementTimedOut = 1
PRINT 'Statement timed out after 60 seconds'
ELSE
PRINT 'Statement completed in less than 60 seconds'
请注意,我制作了NextStatementTimeOutSeconds
和@@LastStatementTimedOut
以说明我想要做的事情。
感谢您的建议。我正在考虑在单个sql脚本/批处理中使用这样的超时,如果可能的话。
背景:我们有几个存储过程,我希望比X秒快。所以我会一个接一个地打电话给他们;如果一个时间超过X秒,我就会中止并打印一个类似'sproc 13花费太长时间'的声明。数据变化,我正在尝试不同的索引更改,所以我想在这些更改后对所有sprocs进行时间测试,以确保它们都低于X秒。
答案 0 :(得分:3)
通常,在发出SQL语句的命令上设置超时。例如,如果那是在C#中,则设置IDbCommand.CommandTimeout属性,如果语句尚未完成,它将在超时到期后抛出SQLException。然后,这将回滚任何交易。
在SQL Server上的计划任务中,我希望在配置作业时,某个位置的向上/向下控件中会有一个值,允许您更改作业的超时。我认为SQL Server中的术语是“执行超时”但我不知道如何设置它我害怕。
重点是 - 查看运行语句的内容,而不是实际的语句本身。
答案 1 :(得分:1)
您可以使用query governor来限制查询的运行时间。下行是,它是影响针对特定数据库启动的所有查询的全局选项。
使用查询调控器成本限制 指定上限的选项 查询可以的时间段 跑。查询成本是指 估计的经过时间,以秒为单位, 需要完成一个查询 具体的硬件配置。
如果指定非零,非负 值,查询调控器不允许 执行任何具有的查询 估计成本超过该值。 为此指定0(默认值) 选项关闭查询调控器, 并且允许所有查询运行 没有任何时间限制。
如果使用sp_configure来更改 查询调控器成本限制的值, 更改的值是服务器范围的。至 更改每个连接的值 基础,使用SET QUERY_GOVERNOR_COST_LIMIT语句。
查询调控器成本限制选项 是一个高级选项。如果你是 使用存储的sp_configure系统 你改变设置的程序 可以更改查询调控器成本限制 仅在设置了显示高级选项时 到1.设置生效 立即(没有服务器 重新启动)。
答案 2 :(得分:1)
如果您使用的是SQL Server,则可以将链接服务器添加到运行查询的数据库中。您可以为链接服务器设置超时,如:
EXEC master.dbo.sp_serveroption @server=N'linkedserver',
@optname=N'query timeout', @optvalue=N'1'
然后您可以运行查询:
select * from openquery(linkedserver,'select * from ...')
您可以使用TRY...CATCH块在发生超时时捕获超时:
begin try
select * from openquery(linkedserver,'select * from ...')
end try
begin catch
print @@error
end catch
对于“查询超时已过期”,@@错误将为7320。
答案 3 :(得分:0)
一种可能是您可以监控所有活动连接并终止任何对超时有效的连接。
我以前从未做过类似的事情。