DBA工具——DMV——通过sys.dm_exec_procedure_stats查看存储过程执行信息

原文:DBA工具——DMV——通过sys.dm_exec_procedure_stats查看存储过程执行信息

对于DBA来说,经常要手机存储过程的某些信息:

  1. 执行了多少次
  2. 执行的执行计划如何
  3. 执行的平均读写如何
  4. 执行平均需要多少时间
列名 数据类型 说明

database_id


int


存储过程所在的数据库 ID。


object_id


int


存储过程的对象标识号。


type


char(2)


对象的类型:

P = SQL 存储过程

PC = 程序集 (CLR) 存储过程

X = 扩展存储过程


type_desc


nvarchar(60)


对对象类型的说明:

SQL_STORED_PROCEDURE

CLR_STORED_PROCEDURE

EXTENDED_STORED_PROCEDURE


sql_handle


varbinary(64)


可用于与 sys.dm_exec_query_stats 中从此存储过程中执行的查询关联。


plan_handle


varbinary(64)


内存中计划的标识符。该标识符是瞬态的,仅当计划保留在缓存中时,它才保持不变。该值可以与 sys.dm_exec_cached_plans 动态管理视图一起使用。


cached_time


datetime


存储过程添加到缓存的时间。


cached_time


datetime


存储过程添加到缓存的时间。


last_execution_time


datetime


上次执行存储过程的时间。


execution_count


bigint


存储过程自上次编译以来所执行的次数。


total_worker_time


bigint


此存储过程自编译以来执行所用的 CPU 时间总量(微秒)。


last_worker_time


bigint


上次执行存储过程所用的 CPU 时间(微秒)。


min_worker_time


bigint


此存储过程在单次执行期间曾占用的最大 CPU 时间(微秒)。


max_worker_time


bigint


此存储过程在单次执行期间曾占用的最大 CPU 时间(微秒)。


total_physical_reads


bigint


此存储过程自编译后在执行期间所执行的物理读取总次数。


last_physical_reads


bigint


上次执行存储过程时所执行的物理读取次数。


min_physical_reads


bigint


该存储过程在单次执行期间所执行的最少物理读取次数。


max_physical_reads


bigint


该存储过程在单次执行期间所执行的最大物理读取次数。


total_logical_writes


bigint


此存储过程自编译后在执行期间所执行的逻辑写入总次数。


last_logical_writes


bigint


上次执行存储过程时所执行的逻辑写入次数。


min_logical_writes


bigint


该存储过程在单次执行期间所执行的最少逻辑写入次数。


max_logical_writes


bigint


该存储过程在单次执行期间所执行的最大逻辑写入次数。


total_logical_reads


bigint


此存储过程自编译后在执行期间所执行的逻辑读取总次数。


last_logical_reads


bigint


上次执行存储过程时所执行的逻辑读取次数。


min_logical_reads


bigint


该存储过程在单次执行期间所执行的最少逻辑读取次数。


max_logical_reads


bigint


该存储过程在单次执行期间所执行的最大逻辑读取次数。


total_elapsed_time


bigint


完成此存储过程的执行所用的总时间(微秒)。


last_elapsed_time


bigint


最近完成此存储过程的执行所用的时间(微秒)。


min_elapsed_time


bigint


任意一次完成此存储过程的执行所用的最短时间(微秒)。


max_elapsed_time


bigint


任意一次完成此存储过程的执行所用的最长时间(微秒)。

下面语句返回前十句耗费时间最长的存储过程信息:

SELECT TOP 10
        a.object_id ,
        a.database_id ,
        DB_NAME(ISNULL(a.database_id,‘‘)) ‘DatabaseName‘,
        OBJECT_NAME(object_id, database_id) ‘proc name‘ ,
        a.cached_time ,
        a.last_execution_time ,
        a.total_elapsed_time ,
        a.total_elapsed_time / a.execution_count AS [avg_elapsed_time] ,
        a.execution_count ,
        a.total_physical_reads / a.execution_count avg_physical_reads ,
        a.total_logical_writes ,
        a.total_logical_writes / a.execution_count avg_logical_reads ,
        a.last_elapsed_time ,
        a.total_elapsed_time / a.execution_count avg_elapsed_time ,
        b.text ,
        c.query_plan
FROM    sys.dm_exec_procedure_stats AS a
        CROSS APPLY sys.dm_exec_sql_text(a.sql_handle) b
        CROSS APPLY sys.dm_exec_query_plan(a.plan_handle) c
ORDER BY [total_worker_time] DESC ;

GO
时间: 2024-10-12 12:18:26

DBA工具——DMV——通过sys.dm_exec_procedure_stats查看存储过程执行信息的相关文章

DBA工具——DMV——如何知道TSQL语句已运行了多久

原文:DBA工具--DMV--如何知道TSQL语句已运行了多久 DBA通常想知道正在运行的语句已经执行了多久了?可以使用Sqlserver profiler来捕获语句的开始时间,和现有时间比较,但是在生产环境下通常会对性能有负面影响,所以通常不建议在非必要的前提下在生产环境使用SQL Server Profiler. 此时,可以使用DMV来查询: sys.dm_exec_requests中有一个重要字段:start_time,表示request的开始时间,一个批处理就是一个request,一个r

如何只授予用户查看存储过程定义的权限

有个网友问我,如何授予某个用户只能查看某些存储过程的定义权限,而不能让用户去修改.执行存储过程.看似简单的问题,却因为从没有碰到这样的需求.花了点时间才梳理.总结清楚. 关于ORACLE账号的权限问题,一般分为两种权限: 系统权限: 允许用户执行特定的数据库动作,如创建表.创建索引.创建存储过程等 对象权限: 允许用户操纵一些特定的对象,如读取视图,可更新某些列.执行存储过程等 像这种查看存储过程定义的权限为对象权限,但是我们还是首先来看看关于存储过程的系统权限吧: SQL> SELECT *

查看正在执行的sql

简介  大家都知道使用sp_who2这个命令来查看当前正在的执行的SQL语句的spids.但是显示的信息有限.比如,它只显示执行SELECT,DELETE,UPDATE等.看不到实际的sql命令. 知道正在执行哪条sql语句对于我们debug程序,找出哪些语句花费很长时间,或是哪些语句产生堵塞来说非常重要.而且这个常用来查看存储过程执行到哪一步.执行到哪个语句. 所以我们需要一个比sp_who2更好的命令来做这些工作.这个命令使用SQL的动态管理视图 Dynamic Management Vie

如何查看存储过程中动态生成的sql

今天在工作中遇到那么一个需求,要查看存储过程中生成的sql,以便和实际的业务需求核对. 经过多方查询,想到如下办法: 1.在存储过程中凡是涉及到execute immediate mysql的地方,加上DBMS_OUTPUT.PUT_LINE(mysql);同时为了减少运行时间将execute immediate mysql注释. 2.如果因为mysql字符过长,报string buffer is too small,那么采用另外一种方式,事先定义v_pos Number := 1;然后通过以下

(4.27)查看存储过程中的依赖关系

关键词:查看存储过程中引用的表,查看表在哪些存储过程中出现过 很多时候需要找到存储过程所依赖的对象.博客描述了一种在SQL服务器中查找存储过程依赖关系的方法. 以下查询创建存储过程. 1 2 3 4 5 6 7 8 9 10 11 IF object_id('usp_getpersonaddress') is not null drop proc usp_getpersonaddress GO Create procedure usp_getpersonaddress AS SELECT pp.

2.Lucene3.6.2包介绍,第一个Lucene案例介绍,查看索引信息的工具lukeall介绍,Luke查看的索引库内容,索引查找过程

 1  Lucen目录介绍 2  lucene-core-3.6.2.jar是lucene开发核心jar包 contrib  目录存放,包含一些扩展jar包 3  案例 建立第一个Lucene项目:lucene3_day1 (1)需要先将数据转换成为Document对象,每一个数据信息转换成为Field(String name, String value, Field.Store store, Field.Indexindex) (2)指定索引库位置Directorydirectory =

SQLServer查看存储过程的方法

使用 sp_helptext 查看存储过程的定义 在对象资源管理器中,连接到 数据库引擎实例,再展开该实例. 在工具栏上,单击“新建查询”. 在查询窗口中,输入下列语句.更改数据库名称和存储过程名称以引用所需的数据库和存储过程. USE ycamc;GOEXEC sp_helptext 'ps_RoleListMenuArea';

Map工具系列-08-map控件查看器

所有cs端工具集成了一个工具面板 -打开(IE) Map工具系列-01-Map代码生成工具说明 Map工具系列-02-数据迁移工具使用说明 Map工具系列-03-代码生成BySQl工具使用说明 Map工具系列-04-SQL合并执行工具 Map工具系列-05-添加业务参数工具 Map工具系列-06-销售营改增历史数据处理工具 Map工具系列-07-TFS变更集提取工具 Map工具系列-08-map控件查看器 Map工具系列-09-文件自动对比合并工具 more... 微信小程序之明源商城系列 1.

Mysql查看存储过程、函数、视图、触发器、表

mysql查看所有存储过程,函数,视图,触发器,表查询数据库中的存储过程和函数 方法一:select `name` from mysql.proc where db = 'your_db_name' and `type` = 'PROCEDURE' //存储过程select `name` from mysql.proc where db = 'your_db_name' and `type` = 'FUNCTION' //函数 方法二:show procedure status; //存储过程s