使用系统函数、存储过程和DBCC SQLPERF命令来监控SQL Server(2)

发表于:2013-3-05 09:10

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:黄钊吉    来源:51Testing软件测试网采编

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

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

  情景:

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

  准备工作

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

  ● Sp_who

  ● Sp_who2

  步骤:

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

  2、在新查询窗口中输入以下脚本:

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

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号