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

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. 专题三:自定义Web服务器

    前言: 经过前面的专题中对网络层协议和HTTP协议的简单介绍相信大家对网络中的协议有了大致的了解的, 本专题将针对HTTP协议定义一个Web服务器,我们平常浏览网页通过在浏览器中输入一个网址就可以看到 ...

  2. CF864D Make a Permutation!

    思路: 贪心,构造,模拟. 实现: #include <bits/stdc++.h> using namespace std; ], a[], vis[], n; int main() { ...

  3. Elasticsearch--地理搜索

    目录 地理位置索引 空间搜索映射定义 示例 基于距离的排序 边界框过滤 距离的限制 任意地理形状搜索 点 包络线 多边形 多个多边形 把形状保存到索引中 地理位置索引 空间搜索映射定义 elastic ...

  4. JavaScript(九)正则表达式

    RegExp 正则表达式 ,一般被创建出来就是用于 字符串的替换 查找方法中的 1.创建正则表达式 var reg = /pattern/flag; // 字面量 var reg = new RegE ...

  5. Python学习日记之运算符

  6. 【sqli-labs】 less64 GET -Challenge -Blind -130 queries allowed -Variation3 (GET型 挑战 盲注 只允许130次查询 变化3)

    双括号整型 http://192.168.136.128/sqli-labs-master/Less-64/?id=1)) or ((1

  7. HDU_1556_线段树区间更新

    Color the ball Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  8. 03Microsoft SQL Server 数据类型

    Microsoft SQL Server 数据类型 数据类型 Number 类型: 数据类型 描述 存储 bit  允许0,1或NULL    tinyint 允许从 0 到 255 的所有数字. 1 ...

  9. spring aop 内部调用问题解决

    方法1: 基于 proxy 的 spring aop 带来的内部调用问题可以使用 AopContext.currentProxy() 强转为当前的再调用就可以解决了 例如: 错误用法:public A ...

  10. 支持向量机(SVM)原理浅析

    因为网页博客输入公式很麻烦,所以就在word上面写了,然后截图发上来. 后续关于SVM和FC在深度学习当中得使用对比分析,我再补充.