承接上文,本文讲述怎样使用系统存储过程来监控系统。

SQLServer相同也提供了一系列系统存储过程用于监控SQLServer,获取当前进程、会话、请求以及锁定的具体信息。本文将演示系统存储过程来实现这些监控。

情景:

有时候你会发现应用程序突然变得非常慢,常常须要等待数据库响应,此时你须要高速查看是否请求被堵塞或者挂起。

准备工作:

在本文中,将使用下面存储过程来获取当前进程的信息:

  • Sp_who
  • Sp_who2

步骤:

1、  打开SSMS连到SQLServer实例并打开新查询窗体。

2、  在新查询窗体中输入下面脚本


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
USE
tempdb
GO
 
--创建測试表
IF
OBJECT_ID('tempdb.dbo.#tbl_SPWho')
IS NOT
NULL
    BEGIN
        DROP
TABLE tempdb.dbo.#tbl_SPWho
    END
 
CREATE TABLE tempdb.dbo.#tbl_SPWho
    (
      spid SMALLINT
,
      ecid
SMALLINT ,
      [status]
NVARCHAR(30)
,
      loginame
NVARCHAR(128)
,
      hostName NVARCHAR(128)
,
      blk
CHAR(5)
,
      dbname NVARCHAR(128)
,
      cmd
NVARCHAR(16)
,
      request_id INT
    )
 
--从系统存储过程中获取数据并插入暂时表中
INSERT  INTO tempdb.dbo.#tbl_SPWho
        EXEC
sp_who
GO
 
--创建存放sp_who2信息的暂时表
IF
OBJECT_ID('tempdb.dbo.#tbl_SPWho2')
IS NOT
NULL
    BEGIN
        DROP
TABLE tempdb.dbo.#tbl_SPWho2
    END
 
CREATE TABLE tempdb.dbo.#tbl_SPWho2
    (
      spid SMALLINT
,
      [status]
NVARCHAR(30)
,
      [login]
NVARCHAR(128)
,
      HostName
NVARCHAR(128)
,
      BlkBy CHAR(5)
,
      DBName
NVARCHAR(128)
,
      Command NVARCHAR(16)
,
      CPUTime
INT ,
      DiskIO INT
,
      LastBatch
NVARCHAR(50)
,
      ProgramName NVARCHAR(100)
,
      SPID2
SMALLINT ,
      REQUESTID INT
    )
 
--从系统存储过程中获取数据并插入暂时表中
INSERT  INTO tempdb.dbo.#tbl_SPWho2
        EXEC
sp_who2
GO
 
--查看特定数据库的数据
SELECT  spid
AS SessionID
,
        ecid AS
ExecutionContextID
,
        [status]
AS ProcessStatus
,
        loginame AS
LoginName ,
        hostname
AS HostName
,
        blk AS
BlockedBy ,
        dbname
AS DatabaseName
,
        cmd AS
CmomandType ,
        request_id
AS RequestID
FROM    dbo.#tbl_SPWho
WHERE  
dbname =
'AdventureWorks'
GO
 
--仅查看堵塞的数据
SELECT  spid
AS SessionID
,
        ecid AS
ExecutionContextID
,
        [status]
AS ProcessStatus
,
        loginame AS
LoginName ,
        hostname
AS HostName
,
        blk AS
BlockedBy ,
        dbname
AS DatabaseName
,
        cmd AS
CmomandType ,
        request_id
AS RequestID
FROM    dbo.#tbl_SPWho
WHERE  
blk >
0
GO
 
--查看挂起的数据
SELECT  spid
AS SessionID
,
        ecid AS
ExecutionContextID
,
        [status]
AS ProcessStatus
,
        loginame AS
LoginName ,
        hostname
AS HostName
,
        blk AS
BlockedBy ,
        dbname
AS DatabaseName
,
        cmd AS
CmomandType ,
        request_id
AS RequestID
FROM    dbo.#tbl_SPWho
WHERE  
[STATUS]
= 'suspended'
GO

分析:

本例中,创建了两个暂时表,用于存放sp_who 和sp_who2存储过程返回的数据结果,然后通过INSERT…EXECUTE命令把结果插入到暂时表中,样例中演示了对sp_who的使用。至于sp_who2的使用是一样的。

之所以使用暂时表来存放数据,是由于sp_who/sp_who2这两个系统存储过程不能直接筛选结果。所以须要存到表里面做二次处理。

扩充信息:

如今来简介一下,在DMO被增加到SQLServer之前,sp_moitor、sp_who2、sp_who这三个系统存储过程被广泛用于监控系统当前信息。

Sp_monitor在上文中已经提到过。而且能够和系统统计函数互换使用。

Sp_who是用于获取当前SQLServer进程、会话和请求的具体信息的系统存储过程。

通过这个存储过程,能够知道谁运行了什么操作或者命令,和哪些进程被哪些进程堵塞了。

这个存储过程有一些可选的參数:@loginame(类型为sysname),session ID(类型为smallint),和ACTIVE。

能够通过传入@loginame来筛选特定的登录名的信息,假设Session ID也被定义,也会筛选特定sessionid的信息。

假设没有參数,将范围实例级别的信息。

假设你没有VIEW SYSTEM STATE权限,你只能够查看自己这个会话的信息。假设使用了ACTIVE參数。

存储过程将返回活动的进程。

对于sp_who返回的结果:

Spid:返回sessionID也就是会话ID。这些ID中。1到50(含)为系统会话。

51及以上sessionid才是用户会话ID。

Exid:有时候结果中可能会有多个同样的SPID,这往往是由于发生了并行查询。这一列代表了查询的上下文ID。而0代表了父线程,其它值代表子线程。

Status:返回进程的的状态,包含:Dormant(休眠)、Running(正在执行)、Background(正在后台执行的进程如死锁侦測)、Rollback(事务正在回滚)、Pending(挂起,该会话正在等待可用的工作线程)、Runnable(会话的任务在等待获取时间量程时位于计划程序的可执行队列中)、Spinloop(会话的任务正在等待调节锁变为可用)、Suspended(会话正在等待时间如I/O完毕)。

Loginame:会话所相应的登录名

Hostname:会话相应的机器名

Blk:假设会话被堵塞。这里将显示堵塞的会话ID,假设没有,降为0。

Dbname:返回特定会话所请求的数据库名。

Cmd:返回数据库引擎的命令类型。

Request_id:会话中的请求ID。

相对于sp_who,sp_who2返回很多其它的信息。可是sp_who2是未公开的系统存储过程,意味着你在联机丛书中找不到相关信息。

使用系统存储过程来监控SQLServer进程和会话具体解释的更多相关文章

  1. 第三章——使用系统函数、存储过程和DBCC SQLPERF命令来监控SQLServer(3)

    原文:第三章--使用系统函数.存储过程和DBCC SQLPERF命令来监控SQLServer(3) 本文为这个系列最后一篇.将是如何使用DBCC命令来监控SQLServer日志空间的使用情况. 前言: ...

  2. JSON序列化及利用SqlServer系统存储过程sp_send_dbmail发送邮件(一)

    JSON序列化 http://www.cnblogs.com/yubaolee/p/json_serialize.html 利用SqlServer系统存储过程sp_send_dbmail发送邮件(一) ...

  3. SQLSERVER中的系统存储过程的使用的总结

    -----------------------------系统存储过程-------------------------------- --列出SQL Server实例中的数据库sp_database ...

  4. 部分具有统计功能的TSQL语句(例如DBCC语句,全局函数,系统存储过程)

    部分具有统计功能的TSQL语句(例如DBCC语句,全局函数,系统存储过程) 这些功能也能帮助用户了解和监控SQLSERVER的运行情况 DBCC语句,DBCC语句是SQL2005的数据库控制台命令 D ...

  5. AIX系统的日常监控维护

    UNIX操作系统在各电信运营商中应用非常广泛,各种业务管理系统的后台服务器几乎都采用UNIX操作系统.AIX作为UNIX操作系统中的一种, 因其稳定性高.兼容性好的特点受到众多系统管理员的欢迎.下面提 ...

  6. Sql Server 常用系统存储过程大全

    -- 来源于网络 -- 更详细的介结参考联机帮助文档 xp_cmdshell --*执行DOS各种命令,结果以文本行返回. xp_fixeddrives --*查询各磁盘/分区可用空间 xp_logi ...

  7. Windows下使用性能监视器监控SqlServer的常见指标

    这篇文章主要介绍了Windows下使用性能监视器监控SqlServer的常见指标,常见指标包括Buffer Cache Hit Ratio.Pages/sec. Available Bytes.Dis ...

  8. 用飞信监控GoldenGate进程

    监控GoldenGate进程 1)         在goldengate安装目录下建立文件ogginfo $vim ogginfo  info all 2)         配置飞信报警       ...

  9. 【转载】Linux系统与性能监控

    原文地址:http://kerrigan.sinaapp.com/post-7.html Linux System and Performance Monitoring http://www.hous ...

随机推荐

  1. php数据类型的转换

    1.强制类型的转换 setType('变量','值') 值:可以是8大数据类型的任何一种 变量:(8大数据类型)需要转换的变量 $var="123abc"; setType($va ...

  2. FCC 基础JavaScript 练习6

    1.对象和数组很相似,数组是通过索引来访问和修改数据,对象是通过属性来访问和修改数据的, 对象适合用来存储结构化数据,就和真实世界的对象一模一样,比如一只猫. 任务 创建一个叫做myDog的对象,它里 ...

  3. 盒子模型,top和margin-top

    1. 标准盒子模型: width只是内容的宽度. 元素的总宽度=width + padding*2 +border*2 +margin*2. IE盒子模型: width=内容的宽度 + padding ...

  4. (3)左右值再探与decltype

    Decltype 类型指示符 “引用从来都作为其所指对象的同义词出现,只有用在decltype处是一个例外” 理解: Decltype和auto区别: 1.     auto是从表达式类型推断出要定义 ...

  5. WebView浅谈

    课程Demo public class MainActivity extends Activity { private String url = "http://baidu.com/&quo ...

  6. POJ_1062_(dijkstra)

    昂贵的聘礼 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 48126   Accepted: 14343 Descripti ...

  7. 【linux】 下根目录,家目录区别,以及普通用户到root用户的切换

    一:家目录 一般普通用户,家目录是/home/用户名 root用户,家目录是/root root登录系统,执行如下命令进入root的家目录 cd /cd ~ 进入家目录后执行如下命令获取具体路径 pw ...

  8. 12C语言标准函数库

    C语言标准函数库 数学函数 三角函数 指数和对数函数 双曲线函数 其它函数 Sqrt() Pow() Exp() Log() Sin() Cos() Tan() 时间函数 查找和排序 Bsearch( ...

  9. layer iframe层弹出图片

    这个js是在一个layer iframe弹出层中,点击按钮弹出图片

  10. 字符串匹配「 KMP 算法 」

    引言 众所周知,字符串无论是在 OI 中还是别的计算机领域都占有比较大的比重,今天说的就是一个关于匹配字符串的算法——「 KMP 算法 」. 0x00 KMP 算法用于解决这样的一类问题:给定一个文本 ...