SqlServer异常处理常用步骤
SQLServer常见的问题主要是SQL问题造成,常见的主要是CPU过高和阻塞。
一、CPU过高的问题
1、查询系统动态视图查询执行时间长的sql语句
WITHProcessCTE(blocked)AS ( SELECTspidFROMsys.sysprocessesWHEREcpu>500 ) SELECTdistincta.* FROM( SELECTTEXT,AA.*FROMsys.sysprocessesAA CROSSAPPLYsys.dm_exec_sql_text(AA.sql_handle) )a JOINProcessCTEbucteWITH(NOLOCK) ONbucte.blocked=a.spid --whereloginame='TCScenery' ORDERBYa.CPU
二、阻塞问题
1、查询系统动态视图查询阻塞的sql语句
WITHProcessCTE(blocked)AS ( SELECTblockedFROMsys.sysprocessesWHEREblocked>0 union SELECTblockedFROMsys.sysprocessesWHEREblocked>0 ) SELECTdistincta.* FROM( SELECTTEXT,AA.*FROMsys.sysprocessesAA CROSSAPPLYsys.dm_exec_sql_text(AA.sql_handle) )a JOINProcessCTEbucteWITH(NOLOCK) ONbucte.blocked=a.spid ORDERBYa.blocked
2、使用系统自带的存储过程
Sp_who2和sp_lock以及使用dbccinputbuffer(spid)也可以用来分析阻塞
sp_who可以返回如下信息:(可选参数LoginName,或active代表活动会话数)
Spid (系统进程ID)
status (进程状态)
loginame (用户登录名)
hostname(用户主机名)
blk (阻塞进程的SPID)
dbname (进程正在使用的数据库名)
Cmd (当前正在执行的命令类型)
sp_who2除了显示上面sp_who的输出信息外,还显示下面的信息: (可选参数LoginName,或active代表活动会话数)
CPUTime (进程占用的总CPU时间)
DiskIO (进程对磁盘读的总次数)
LastBatch (客户最后一次调用存储过程或者执行查询的时间)
ProgramName (用来初始化连接的应用程序名称,或者主机名)
下面是sp_who的用法,sp_who2与此类似
A.列出全部当前进程
以下示例使用没有参数的sp_who来报告所有当前用户。
USEmaster; GO EXECsp_who; GO
B.列出特定用户的进程
以下示例显示如何通过登录名查看有关单个当前用户的信息。
USEmaster; GO EXECsp_who'janetl'; GO
C.显示所有活动进程
USEmaster; GO EXECsp_who'active'; GO
D.显示会话ID标识的特定进程
USEmaster; GO EXECsp_who'10'--specifiestheprocess_id; GO
sp_lock用法说明
sp_lock[[@spid1=]'sessionID1'][,[@spid2=]'sessionID2'][;]
[@spid1=]'sessionID1'
来自用户想要锁定其信息的sys.dm_exec_sessions的数据库引擎会话ID号。sessionID1的数据类型为int,默认值为NULL。执行sp_who可获取有关该会话的进程信息。如果未指定会话ID1,则显示有关所有锁的信息。
[@spid2=]'sessionID2'
来自sys.dm_exec_sessions的另一个数据库引擎会话ID号,该会话ID号可能与sessionID1同时具有锁,并且用户也需要其有关信息。sessionID2的数据类型为int,默认值为NULL。
在sp_lock结果集中,由@spid1和@spid2参数指定的会话所持有的每个锁都对应一行。如果既未指定@spid1又未指定@spid2,则结果集将报告当前在数据库引擎实例中处于活动状态的所有会话的锁。
DBCCINPUTBUFFER
显示从客户端发送到Microsoft®SQLServer™的最后一个语句。
语法
DBCCINPUTBUFFER(spid)
参数
spid
是sp_who系统存储过程的输出中所显示的用户连接系统进程ID(SPID)。
结果集
DBCCINPUTBUFFER返回包含如下列的行集。
1-n=参数
例如,当缓冲区中的最后事件是DBCCINPUTBUFFER(11)时,DBCCINPUTBUFFER将返回以下结果集。
EventType ParametersEventInfo
---------------------------------------------
LanguageEvent0 DBCCINPUTBUFFER(11)
(1row(s)affected)