对于DBA来说,经常要手机存储过程的某些信息:
- 执行了多少次
- 执行的执行计划如何
- 执行的平均读写如何
- 执行平均需要多少时间
列名 | 数据类型 | 说明 |
---|---|---|
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