对于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_countavg_elapsed_time ,
b.text ,
c.query_plan
FROM sys.dm_exec_procedure_stats AS a
CROSS APPLYsys.dm_exec_sql_text(a.sql_handle) b
CROSS APPLYsys.dm_exec_query_plan(a.plan_handle) c
ORDERBY [total_worker_time] DESC ;