SQL Server 2005及以上版本提供了当前正在运行时的各种动态管理视图,视图命名以sys.dm_exec为开头。其中包含下面几个常用的视图:
Sys.dm_exec_requests Sys.dm_exec_sql_text sys.dm_exec_sessions Sys.dm_exec_connections Sys.dm_exec_query_stats Sys.dm_exec_query_resource_semaphores
下面的示例代码用于获取当前服务器正在处理的用户请求,并将其执行语句打印出来:
SELECT * FROM sys.dm_exec_requests AS der CROSS APPLY sys.dm_exec_sql_text(der.sql_handle) AS dest WHERE der.session_id > 50
在上面示例中,通过sys.dm_exec_requests视图可以获取当前正在执行的任务信息。WHERE子句中的过滤条件是为了过滤掉session_id为50以前的session。session id 在50以内的进程为系统预留进程,用于数据库后台进程,sys.dm_exec_sql_text为函数,在查询语句中,如果要直接使用该函数,需要使用APPLY子句,该函数使用sql_handle与plan_handle都可以获取需要的文本信息。
Sql_handle和plan_handle都是SQL Server生成的唯一标识,前者以运行语句为基础通过hash算法生成,后者将该语句生成的执行计划进行hash计算,获取plan_handle。通过这两个标识,可以找到对应的SQL语句及执行计划。