是否有防止长事务处理的参数?我想自动回滚所有的事务,需要超过5分钟。有可能吗?我正在开发2008 R2。
我之所以这样问,是因为我正在处理许多糟糕的应用程序:如果应用程序异常,它们只在警报关闭时才释放事务。我真的知道这听起来是个笑话,但事实并非如此!我不能改变这个应用程序,我不能解雇他们的开发人员,但是我需要解决这个问题:长事务(也可以是一个简单的、低成本的事务)必须花费不到5分钟。否则,一些表将被锁定,直到模态关闭。
发布于 2014-09-24 00:24:55
有一个名为“查询调控器成本限制”的选项,它接受一个整数值。您指定的值是查询可以运行的最大时间(以秒为单位)。请注意,这是基于估计的时间和价值。如果成本超过此值,则不允许执行查询。这不是一门精确的科学,有些可能跑得更长,有些则不允许跑得更短,因为这是基于估算成本的。
http://technet.microsoft.com/en-us/library/ms190419(v=sql.105).aspx
发布于 2014-09-24 10:46:19
您可能对另一个StackOverflow线程感兴趣:
限制Server中可用于查询的资源
https://stackoverflow.com/questions/9336194/limit-resources-available-to-query-in-sql-server
发布于 2014-09-24 10:55:27
这是我的临时答案:
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 millis)的所有阻塞进程。在这之后,它就用那个pid来执行一次杀戮。我将用Sql server代理来安排这个存储过程。
https://serverfault.com/questions/630599
复制相似问题