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

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. LN : leetcode 53 Maximum Subarray

    lc 53 Maximum Subarray 53 Maximum Subarray Find the contiguous subarray within an array (containing ...

  2. Java编程思想读书笔记_第7章

    final关键字类似const: import java.util.*; public class FinalData { static Random rand = new Random(47); f ...

  3. P2668 斗地主 dp+深搜版

    题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗地主中,牌的大小关系根据牌的数码表示如下:3<4< ...

  4. CSS知识点整理(1):CSS语法,层叠次序,选择器,其他重要方面。

    1. css的全称 2. CSS的层叠次序:优先级由低到高 ·浏览器设置 ·外部样式表 或者 内部样式表 —— 就近原则 ·内联样式 3. CSS的3种形式,以及每种形式的语法格式 ——注意样式表的为 ...

  5. Python中*args和**kwargs的使用

    函数定义 使用*args和**kwargs传递可变长参数: *args用作传递非命名键值可变长参数列表(比如元组) **kwargs用作传递键值可变长参数列表(比如字典) 函数入参 *args 传递一 ...

  6. css的新特性 calc () 使用

    calc()对大家来说,或许很陌生,不太会相信calc()是css中的部分.因为看其外表像个函数,既然是函数为何又出现在CSS中呢?这一点也让我百思不得其解,今天有一同事告诉我,说CSS3中有一个属性 ...

  7. 在中间层 .NET 应用程序中通过授权管理器使用基于角色的安全

    基于角色的安全是从 Windows NT 的第一个版本开始在 Windows 平台上发展而来的.使用角色,操作系统可以通过检查称为 BUILTIN\Administrators 的组的安全上下文做出一 ...

  8. Android Studio 入门 Hello World

    Android Studio 入门 Hello World Gavin要加油 1.5k 6月22日 发布 推荐 1 推荐 收藏 17 收藏,2.1k 浏览 引言 前两天开始学习android开发,本来 ...

  9. canvas一周一练 -- canvas绘制太极图(6)

    运行效果: <!DOCTYPE html> <html> <head> </head> <body> <canvas id=" ...

  10. unittest自定义运行全量case or 运行指定的单个或多个case

    import unittest import os from case.zufang.test_api_area_rentProlist import Zf1 case_path = os.path. ...