使用系统存储过程来监控SQLServer进程和会话具体解释
承接上文,本文讲述怎样使用系统存储过程来监控系统。
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进程和会话具体解释的更多相关文章
- 第三章——使用系统函数、存储过程和DBCC SQLPERF命令来监控SQLServer(3)
原文:第三章--使用系统函数.存储过程和DBCC SQLPERF命令来监控SQLServer(3) 本文为这个系列最后一篇.将是如何使用DBCC命令来监控SQLServer日志空间的使用情况. 前言: ...
- JSON序列化及利用SqlServer系统存储过程sp_send_dbmail发送邮件(一)
JSON序列化 http://www.cnblogs.com/yubaolee/p/json_serialize.html 利用SqlServer系统存储过程sp_send_dbmail发送邮件(一) ...
- SQLSERVER中的系统存储过程的使用的总结
-----------------------------系统存储过程-------------------------------- --列出SQL Server实例中的数据库sp_database ...
- 部分具有统计功能的TSQL语句(例如DBCC语句,全局函数,系统存储过程)
部分具有统计功能的TSQL语句(例如DBCC语句,全局函数,系统存储过程) 这些功能也能帮助用户了解和监控SQLSERVER的运行情况 DBCC语句,DBCC语句是SQL2005的数据库控制台命令 D ...
- AIX系统的日常监控维护
UNIX操作系统在各电信运营商中应用非常广泛,各种业务管理系统的后台服务器几乎都采用UNIX操作系统.AIX作为UNIX操作系统中的一种, 因其稳定性高.兼容性好的特点受到众多系统管理员的欢迎.下面提 ...
- Sql Server 常用系统存储过程大全
-- 来源于网络 -- 更详细的介结参考联机帮助文档 xp_cmdshell --*执行DOS各种命令,结果以文本行返回. xp_fixeddrives --*查询各磁盘/分区可用空间 xp_logi ...
- Windows下使用性能监视器监控SqlServer的常见指标
这篇文章主要介绍了Windows下使用性能监视器监控SqlServer的常见指标,常见指标包括Buffer Cache Hit Ratio.Pages/sec. Available Bytes.Dis ...
- 用飞信监控GoldenGate进程
监控GoldenGate进程 1) 在goldengate安装目录下建立文件ogginfo $vim ogginfo info all 2) 配置飞信报警 ...
- 【转载】Linux系统与性能监控
原文地址:http://kerrigan.sinaapp.com/post-7.html Linux System and Performance Monitoring http://www.hous ...
随机推荐
- jquery滚轮事件
// jquery 兼容的滚轮事件 $(document).on("mousewheel DOMMouseScroll", function (e) { var delta = ( ...
- 树莓派zero_w设置中文(已成功)
树莓派默认是采用英文字库的,而且系统里没有预装中文字库,所以即使你在locale中改成中文,也不会显示中文,只会显示一堆方块.因此需要我们手动来安装中文字体. 好在有一个中文字体是免费开源使用的.ss ...
- 人人都能读懂的css3 3d小demo
css3 3d案例总结 最近入坑 Web 动画,所以把自己的学习过程记录一下分享给大家.就把最近做的比较好的给大家分享下 1.旋转拼图 首先看下效果 代码主要由HTML和CSS3组成,应该说还是比较简 ...
- 安装好Pycharm后如何配置Python解释器简易教程
呃呃,遇到坑了...... 安装完Python,没有去配置好Python解释器,直接打开Python项目包,去运行程序,程序输出结果只是显示 Process finished with exit co ...
- JavaScriptav数据类型和变量
数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同的数据,需要定 ...
- parsley.js验证的基本引用
前段时间看到博客有些parsley.js验证,只是对parsley.js验证框架基本的应用,对parsley.js更深层理解没有介绍和demo 比如:异步请求,扩展验证的写法,我把我学到的parsle ...
- (转) 淘淘商城系列——Redis集群的搭建
http://blog.csdn.net/yerenyuan_pku/article/details/72860432 本文我将带领大家如何搭建Redis集群.首先说一下,为何要搭建Redis集群.R ...
- Codeforces_764_C. Timofey and a tree_(并查集)(dfs)
C. Timofey and a tree time limit per test 2 seconds memory limit per test 256 megabytes input standa ...
- iOS App Crash原理分析
预备知识:OS X系统分析 1.内核XNU是Darwin的核心,也是整个OS X的核心.XNU本身由以下几个组件构成: Mach微核心 BSD层 libKern I/O Kit 此外,内核是模块化的, ...
- Gitlab forbidden
搭建使用了两年的gitlab 抽风了居然forbidden # vim /etc/gitlab/gitlab.rb gitlab_rails['rack_attack_git_basic_auth'] ...