Sql服务器事务超时

有没有任何参数来防止长事务? 我想自动回滚超过5分钟的所有交易。 它可能吗? 我正在使用Microsoft SQL Server 2008 R2。

背景通知:

我问这是因为我正在处理许多糟糕的应用程序:如果应用程序exception,它们显示模式警报,交易只有当警报closures时才会释放。 我真的知道这似乎是一个笑话,但它不是! 我不能改变这个应用程序,我不能解雇他们的开发者,但我需要解决这个问题:长时间交易(也可以是一个简单的交易成本低)必须less于5分钟。 否则,一些表格将被locking,直到模式closures。

有一个选项叫做“查询pipe理者成本限制”,它取整数值。 您指定的值是查询可以运行的最长时间(以秒为单位)。 请注意,这是基于估计的时间和价值。 如果成本超过这个,查询将不被允许执行。 这不是一门精确的科学,有些可能会延长,有些被禁止的可能会缩短,因为它是基于估计的成本。

http://technet.microsoft.com/en-us/library/ms190419(v=sql.105).aspx

你可能对这个其他的StackOverflow线程感兴趣:

限制可用于在SQL Server中查询的资源

https://stackoverflow.com/questions/9336194/limit-resources-available-to-query-in-sql-server

这是我的临时答案:

DECLARE @ProcessId int=null; SELECT top 1 @ProcessId=p.spid --, s.host_name, s.program_name, s.original_login_name, q.text as sql, wp.spid as waiting_sess, ws.host_name as waiting_host_name, ws.program_name as waiting_program_name, wr.wait_time as waiting_time, wq.text as waiting_sql FROM sys.sysprocesses p join sys.dm_exec_sessions s on s.session_id=p.spid join sys.dm_exec_connections c on c.session_id=p.spid CROSS APPLY sys.dm_exec_sql_text(c.most_recent_sql_handle) AS q join sys.sysprocesses wp on wp.blocked=p.spid join sys.dm_exec_sessions ws on ws.session_id=wp.spid join sys.dm_exec_requests wr on wr.session_id=wp.spid CROSS APPLY sys.dm_exec_sql_text(wr.sql_handle) AS wq WHERE p.spid in (select distinct blocked FROM sys.sysprocesses where blocked>0) and p.blocked<=0 and wr.wait_time>300000 --5min -- uncomment the next line to really kill process -- if @ProcessId is not null EXEC('KILL ' + @ProcessId); 

这是一个查询,以获得所有阻塞进程等待资源> 5分钟(300000毫秒)。 在这之后,它用该pid执行杀死。 我将用Sql服务器代理来安排这个存储过程。