首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sql服务器事务超时

Sql服务器事务超时
EN

Server Fault用户
提问于 2014-09-23 15:04:06
回答 3查看 7.6K关注 0票数 0

是否有防止长事务处理的参数?我想自动回滚所有的事务,需要超过5分钟。有可能吗?我正在开发2008 R2。

背景通知:

我之所以这样问,是因为我正在处理许多糟糕的应用程序:如果应用程序异常,它们只在警报关闭时才释放事务。我真的知道这听起来是个笑话,但事实并非如此!我不能改变这个应用程序,我不能解雇他们的开发人员,但是我需要解决这个问题:长事务(也可以是一个简单的、低成本的事务)必须花费不到5分钟。否则,一些表将被锁定,直到模态关闭。

EN

回答 3

Server Fault用户

发布于 2014-09-24 00:24:55

有一个名为“查询调控器成本限制”的选项,它接受一个整数值。您指定的值是查询可以运行的最大时间(以秒为单位)。请注意,这是基于估计的时间和价值。如果成本超过此值,则不允许执行查询。这不是一门精确的科学,有些可能跑得更长,有些则不允许跑得更短,因为这是基于估算成本的。

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

票数 1
EN

Server Fault用户

发布于 2014-09-24 10:46:19

您可能对另一个StackOverflow线程感兴趣:

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

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

票数 0
EN

Server Fault用户

发布于 2014-09-24 10:55:27

这是我的临时答案:

代码语言:javascript
复制
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代理来安排这个存储过程。

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/630599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档