(一)费时的查询事务
当查询或事务所花的时间较长时,可由SQL SERVER 2005/2008 动态管理视图sys.dm_exec_requests提供相关信息(也可观察sysprocesses系统视图),如status字段为“running”,wait_type为非“NULL”值。“running”代表该进程依然在执行,而wait_type则表示该进程是否在等待资源。如下图。
这也可以从SQL SERVER 2005的Microsoft SQL Server Management Studio管理工具中的活动监视器--》进程信息--》查看相关信息。如下图,所圈出的相关字段可以观察进程之间的相关信息。
开启了事务,但是没有回滚或没有提交,形成了未提交事务。它的特征与观察方式与上面所述相同。从下图中可以看出进程“54”仍持有事务,但此进程停滞不做事,也无等待任何资源,但仍持有事务,从SQL SERVER 2005的Microsoft SQL Server Management Studio管理工具中的“活动监视器--》进程信息”视图,进一步观察“上一批”字段,检查进程是否已经持有资源一段时间。
在SQL 2005(2008)中执行代码示例一,得到如下图。
select spid 进程,STATUS 状态, 登录帐号=SUBSTRING(SUSER_SNAME(sid),1,30)
,用户机器名称=SUBSTRING(hostname,1,12)
,是否被锁住=convert(char(3),blocked)
,数据库名称=SUBSTRING(db_name(dbid),1,20),cmd 命令,waittype as 等待类型
,last_batch 最后批处理时间,open_tran 未提交事务的数量
from master.sys.sysprocesses
--列出锁住别人(在别的进程中blocked字段中出现的值)但自己未被锁住(blocked=0)
Where spid in (select blocked from master.sys.sysprocesses) and blocked=0