RSS
热门关键字:
当前位置 :| 主页>教你一招>

避免资源死锁:识别已打开的事务

来源:不详 作者: 时间:2003-05-30 Tag: 点击:

  因为打开的事务可能会死锁资源,引发性能的问题,所以了解在一个专用数据库中哪些事务是打开的是很有帮助的。被死锁的资源可能堵塞其他数据库的用户。
  
  
  
  为了找出这些已打开的事务就要查询master数据库中的sysprocesses表。sysprocesses表有一个open_tran的列,它表示已有命令是否是一个打开的事务。如果值大于0表示它是一个已经打开的事务。sysprocesses表还有一个spid的列,表示正在访问SQL Server的系统进程的id。你可以使用spid列作为DBCC INPUTBUFFER()系统函数的参数。只有SQL Server的sysadmins帐号才可以执行这个函数。这个函数的输出首先是spid对应的255字符的命令。你可以由此确定哪个命令是影响数据库性能的罪魁祸首,然后根据spid发出一个KILL命令。
  
  下面是打印已打开事务的命令的脚本。它用到了表变量,因此只能在SQL Server 2000上用。
  
  SET NOCOUNT ON
  DECLARE @Commands
   TABLE
   ( ctr INT IDENTITY NOT NULL,
   command VARCHAR(2000) NOT NULL)
  
  
  INSERT @Commands (command)
  SELECT 'DBCC INPUTBUFFER (' CONVERT( VARCHAR(10), spid) ')'
  FROM master..sysprocesses
  WHERE open_tran > 0
  
  
  DECLARE @ctr INT, @command VARCHAR(2000)
  SET @ctr = 1
  
  
  WHILE @ctr < (SELECT COUNT(*) 1 FROM @Commands)
  BEGIN
   SELECT @command = command FROM @Commands WHERE ctr = @ctr
   PRINT '-- ' @command
   EXECUTE (@command)
   SELECT @ctr = @ctr 1
  END
最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册