有的时候,你需要知道一个存储过程在什么时候被执行过。又或者想了解存储过程在执行时占用服务器CPU的时间等等。
可以通过以下SQL列出明细,当然前提你必须拥有数据库管理员权限:
SELECT a.object_id, a.database_id, 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;
附注释:
database_id 存储过程所在的数据库 ID。
object_id 存储过程的对象标识号。
cached_time 存储过程添加到缓存的时间。
cached_time 存储过程添加到缓存的时间。
last_execution_time 上次执行存储过程的时间。
execution_count 存储过程自上次编译以来所执行的次数。
total_worker_time 此存储过程自编译以来执行所用的 CPU 时间总量(微秒)。
last_worker_time 上次执行存储过程所用的 CPU 时间(微秒)。
total_physical_reads 此存储过程自编译后在执行期间所执行的物理读取总次数。
last_physical_reads 上次执行存储过程时所执行的物理读取次数。
min_physical_reads 该存储过程在单次执行期间所执行的最少物理读取次数。
max_physical_reads 该存储过程在单次执行期间所执行的最大物理读取次数。
total_logical_writes 此存储过程自编译后在执行期间所执行的逻辑写入总次数。
last_logical_writes 上次执行存储过程时所执行的逻辑写入次数。
min_logical_writes 该存储过程在单次执行期间所执行的最少逻辑写入次数。
max_logical_writes 该存储过程在单次执行期间所执行的最大逻辑写入次数。
total_logical_reads 此存储过程自编译后在执行期间所执行的逻辑读取总次数。
last_logical_reads 上次执行存储过程时所执行的逻辑读取次数。
total_elapsed_time 完成此存储过程的执行所用的总时间(微秒)。
last_elapsed_time 最近完成此存储过程的执行所用的时间(微秒)。
浙公网安备 33010602011771号