Sql 存储过程执行不在DMV中(sys.dm_exec_procedure_stats、sys.dm_exec_cached_plan)

Sql 存储过程执行不在DMV中(sys.dm_exec_procedure_stats、sys.dm_exec_cached_plan),sql,sql-server,sql-server-2008,stored-procedures,dmv,Sql,Sql Server,Sql Server 2008,Stored Procedures,Dmv,我通过查询DMVsys.dm\u exec\u procedure\u stats来测量数据库中存储过程的执行时间 我发现有些存储过程根本没有列在sys.dm\u exec\u procedure\u stats中。经过调查,似乎包含DDL语句(ALTER TABLE等)的存储过程没有被缓存,因此没有从sys.dm_exec_procedure_stats或sys.dm_exec_cached_plan返回 我在SQLServer2008上观察到了这种行为。当我使用2012时,行为是不同的——所

我通过查询DMV
sys.dm\u exec\u procedure\u stats来测量数据库中存储过程的执行时间

我发现有些存储过程根本没有列在sys.dm\u exec\u procedure\u stats中。经过调查,似乎包含DDL语句(ALTER TABLE等)的存储过程没有被缓存,因此没有从
sys.dm_exec_procedure_stats
sys.dm_exec_cached_plan
返回

我在SQLServer2008上观察到了这种行为。当我使用2012时,行为是不同的——所有存储过程似乎都被缓存并从DMV返回。我在微软官方网站上没有发现任何提及的内容


有什么解决办法吗?我想获取执行DDL语句的存储过程的执行统计信息(例如执行时间)…

我发现了这篇关于同一问题的博文:因此,这似乎是SQL Server 2008的特定问题。。。有什么解决办法吗?我需要获得可能包含DDL语句的存储过程的执行时间(例如,我需要一个可以在任何存储过程上工作的解决方案,而不管其代码如何,并且我可以轻松地从.NET应用程序中查询)……作为旁注,在存储过程中混合使用DDL和DML语句不是一个好的做法。请参阅Microsoft Technet。解决方法包括使用探查器或DDL触发器捕获执行时间并将其记录到用户表中。感谢您的回复。我在.NET应用程序中解决了这个问题:我读取了调用存储过程和完成存储过程的系统日期/时间。之后,我还查询DMV。如果DMV数据不存在,则使用计算的结束-开始时间,否则使用DMV数据(更精确)。这不是最好的解决方案,但已经足够好了。:)