sql Server常见的问题主要是sql问题造成,常见的主要是cpu过高和阻塞。
cpu过高的问题
1、查询系统动态视图查询执行时间长的sql语句
1、查询系统动态视图查询阻塞的sql语句
2、使用系统自带的存储过程
Sp_who2和sp_lock以及使用dbcc inputbuffer(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_who2与此类似
A.列出全部当前进程
以下示例使用没有参数的 sp_who 来报告所有当前用户。
B.列出特定用户的进程
C.显示所有活动进程
D.显示会话 ID 标识的特定进程
sp_lock用法说明
sp_lock [ [ @spid1 = ] 'session ID1' ] [,[@spid2 = ] 'session ID2' ][ ; ]
[ @spid1 = ] 'session ID1'
来自用户想要锁定其信息的 sys.dm_exec_sessions 的数据库引擎会话 ID 号。 session ID1 的数据类型为 int,默认值为 NULL。 执行 sp_who 可获取有关该会话的进程信息。 如果未指定会话 ID1,则显示有关所有锁的信息。
[ @spid2 = ] 'session ID2'
来自 sys.dm_exec_sessions 的另一个数据库引擎会话 ID 号,该会话 ID 号可能与 session ID1 同时具有锁,并且用户也需要其有关信息。 session ID2 的数据类型为 int,默认值为 NULL。
在 sp_lock 结果集中,由 @spid1 和 @spid2 参数指定的会话所持有的每个锁都对应一行。 如果既未指定 @spid1 又未指定 @spid2,则结果集将报告当前在数据库引擎实例中处于活动状态的所有会话的锁。
DBCC INPUTBUFFER
显示从客户端发送到 Microsoft® sql Server™ 的最后一个语句。
语法
DBCC INPUTBUFFER (spid)
参数
spid
是 sp_who 系统存储过程的输出中所显示的用户连接系统进程 ID (SPID)。
结果集
DBCC INPUTBUFFER 返回包含如下列的行集。
例如,当缓冲区中的最后事件是 DBCC INPUTBUFFER(11) 时,DBCC INPUTBUFFER 将返回以下结果集。
EventType Parameters EventInfo
-------------- ---------- ---------------------
Language Event 0 DBCC INPUTBUFFER (11)
(1 row(s) affected)