您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

sp_monitor

语法

语法按命令区分,因为许多类型都有其自己的参数。以下代码段先显示整个存储过程的语法,再显示每个命令类型接口的语法。


sp_monitor [[connection | statement], [cpu | diskio | elapsed time]]  
	[event, [<spid> ]]
	[<procedure>, [<dbname>, [<procname>[, summary | detail]]]]
	[enable] [disable] 
	[help], 
	[deadlock][procstack]

参数

connection

显示各个连接上的信息。connection 使用以下监控表:

  • monProcessSQLText

  • monProcessActivity

    statement

    显示各个语句上的信息。statement 使用以下监控表:

  • monProcessSQLText

  • monProcessStatement

    cpu | diskio | elapsed time

    这些参数用于对 sp_monitor connection 或 sp_monitor statement 的输出排序。

  • cpu – 指示各个连接或语句消耗的 CPU 时间。

  • diskio – 指示每个连接或语句执行的物理读取数。

  • elapsed time – 指示每个连接或语句的 CPU 时间和等待时间的总和。

    event

    有三种可能的显示内容。如果指定:

  • 无选项 – 仅显示用户任务。

  • sp_monitor, event, "-1" – 显示有关所有任务(包括用户任务和系统任务)的等待信息。

  • sp_monitor, event, "spid" – 仅显示有关指定的服务器进程 ID 的等待信息。

    <spid>

    允许获取有关特定任务的 event 信息,方法是输入它的 <spid>。必须在引号内指定 的数值。</p> <p></p> <p> 显示有关存储过程的统计信息:</p> <p> ProcName</p> <p>正在被监控的存储过程。</p> <p> </p> <p> DBNAME</p> <p>存储过程所在的数据库。</p> <p> </p> <p> NumExecs</p> <p>此特定存储过程大约执行的次数。</p> <p> </p> <p> AvgCPUTime</p> <p>执行存储过程所需的平均 CPU 时间。</p> <p> </p> <p>AvgPhysicalReads</p> <p>存储过程执行的平均磁盘读取数。</p> <p> </p> <p>AvgLogicalReads</p> <p>存储过程执行的平均逻辑读取数。</p> <p> </p> <p>AvgMemUsed_KB</p> <p>存储过程使用的平均内存量(以 KB 为单位)。</p> <p> 使用 monSysStatement 监控表。</p> <p> </p> <p>显示有关指定数据库的过程的信息。</p> <p><procname></p> <p>显示有关指定过程的信息。</p> <p>summary | detail</p> <p>显示摘要信息(它提供过程的所有实例的平均值),或者显示详细信息(它提供有关存储过程的每个实例的信息)。</p> <p>enable</p> <p>启用 sp_monitor 的新选项。它打开开始监控所需的配置参数。</p> <p>disable</p> <p>禁用监控。</p> <p>help</p> <p>显示 sp_monitor 的语法和示例,同时报告将此过程用于死锁分析的详细信息:</p> <div class="code-block"><pre><code> sp_monitor 'help', 'deadlock'

help 选项还可提供特定于命令的示例。

deadlock</p> <p>指示 sp_monitor 处理 monDeadlock 表中的历史数据,并输出每个死锁实例的输出块。</p> <p>procstack</p> <p>检查任务的执行环境,包括深层嵌套存储过程的执行环境。所执行的过程堆栈从 monProcessProcedures 监控表中提取。</p> <h3>示例</h3> <p> </p> <h4>示例 1</h4> <p> 报告有关 SAP ASE 服务器繁忙情况的信息:</p> <div class="code-block"><pre><code> sp_monitor


last_run               current_run          seconds 
-------------------    -------------------  --------- 
Jan 29 1987 10:11AM    Jan 29 1987 10:17AM  314

cpu_busy           io_busy     idle 
---------------    ---------   -------------- 
4250(215)-68%      67(1)-0%    109(100)-31% 

packets_received       packets_sent    packet_errors 
----------------       ------------    ------------ 
781(15)                10110(9596)     0(0) 

total_read     total_write total_errors    connections 
-----------    -------------------------   ----------- 
394(67)        5392(53)    0(0)            15(1) 

示例 2

说明如何显示有关连接的信息:


1> sp_monitor "connection"
2> go

spid    LoginName    ElapsedTime  LocksHeld  SQLText  
----    ---------    -----------  ---------  -----------------
12      sa           90300        2          exec get_employee_salaries
27      sa           17700        1          exec get_employee_perks

缺省情况下,缺省输出按 ElapsedTime 的降序顺序排序。

示例 3

标识出执行物理读取最多的连接:


1> sp_monitor "connection","diskio"
2> go

spid  LoginName  Physical_Reads  LocksHeld  SQLText 
----  ---------  --------------  ---------  -------------------------- 
12    sa         117             2          exec get_employee_salaries 
27    sa         1               0          exec get_employee_perks 

示例 4

显示有关每条语句的信息:


1> sp_monitor "statement"
2> go

spid   LoginName   ElapsedTime   SQLText
----   ---------   -----------   -------------------------- 
12     sa          100           exec get_employee_salaries 

示例 5

显示每个任务花费时间等待的事件以及等待的持续时间,按等待时间的降序顺序报告:


1> sp_monitor "event"
2> go

SPID   WaitTime    Description 
------ ----------- ------------------------------------------ 
6      108200      hk: pause for some time 
29     108200      waiting for incoming network data 
10     107800      waiting while allocating new client socket 
15     17100       waiting for network send to complete 
14     5900        waiting for CTLIB event to complete 
14     400         waiting for disk write to complete 
7      200         hk: pause for some time 
7      100         waiting on run queue after yield 
12     100         waiting for network send to complete 

示例 6

显示 spid 14 的事件数据:


1> sp_monitor "event","14"
2> go

WaitTime    Description 
----------- ----------------------------------- 
9000 waiting for CTLIB event to complete 
600 waiting for disk write to complete 
200 waiting for disk write to complete 
100 waiting on run queue after yield 
100 wait for buffer write to complete

#### 示例 7

提供最近运行的过程的摘要,按平均经历时间的降序顺序排序。本示例提供历史监控信息,而不是当前状态:


1> sp_monitor "procedure"
2> go

<h1>Average Procedure Statistics</h1>

<h2>ProcName       DBName  AvgElapsedTime AvgCPUTime AvgWaitTime AvgPhysicalReads AvgLogicalReads AvgPacketsSent NumExecs </h2>
neworder_remote   tpcc   1833     16    1083     26   96    0     6
neworder_local    tpcc   1394     13    1181     31   122   0     38
tc_startup        tpcc   1220     3     1157     0    3     0     59
delivery          tpcc   1000     0     800      23   49    0     2

用法

> 注意</br></p> <p>使用与 sp_monitor 关联的新参数之前,必须设置监控表以及启用这些选项所需的相关存储过程。</p> <p></li></ul><ul><li>SAP ASE 服务器跟踪它对一系列全局变量产生的影响。sp_monitor 显示这些全局变量的当前值以及自最后执行过程后的更改量。</p> <p></li></ul><ul><li>对于每一列,这些统计信息以 ()-%()` 形式显示。

- 第一个数值表示秒数(对于 cpu_busy、io_busy 和 idle)或自 SAP ASE 服务器重新启动后的总数(对于其它列)。

- 小括号中的数值表示自最后一次运行 sp_monitor 后的秒数或总数。百分比符号指示自最后一次运行 sp_monitor 后的时间百分比。

例如,如果报告将 cpu_busy 显示为 "4250(215)-68%",则它意味着 CPU 自 SAP ASE 服务器最后一次启动以来处于忙状态的时间为 4250 秒,自 sp_monitor 最后一次运行以来处于忙状态的时间 215 秒,并且占 sp_monitor 自最后一次运行以来总时间的 68%。

对于 total_read 列,值 394(67) 意味着自 SAP ASE 服务器最后一次启动以来已有 394 个磁盘读取,其中 67 个读取是自最后一次运行 sp_monitor 后进行的。