2011-05-12 62 views
9

是否有可能以编程方式获取LINQ to SQL或ADO.NET Query的执行计划以显示调试信息?如果是这样,怎么样?如何使用LINQ to SQL/ADO.NET获得执行计划

+0

我不知道LINQ的具体情况,但这是一个以编程方式获取查询计划的解决方案。要为LINQ做同样的事情,似乎你必须大量修改生成的文件。应该可行,复杂但可行。 http://social.msdn.microsoft.com/Forums/en-US/sqldatabaseengine/thread/aaf5e9c9-a222-414a-baed-5c0adcc329e2 – RThomas 2011-05-12 15:57:12

+1

你完成了吗?如果您可以在某个时候发布帖子,我很乐意看到解决方案。 – RThomas 2011-05-14 05:42:33

回答

3

当然,有2件事情你需要。

定制实现DbConnection,DbCommandDbDataReader。你可以使用它来拦截所有发送到数据库的SQL。你基本上已经设置好了,所以你有一个记录所有运行的SQL的层。 (我们计划在未来几个月内在此领域开源,敬请关注)

一种显示数据构成方式的方法,这种情况在此处是开源的:http://data.stackexchange.com/stackoverflow/s/345/how-unsung-am-i(请参阅包含执行计划选项)


另一种方法是通过查看proc缓存来做事后诊断。 sys.dm_exec_query_stats包含可以扩展的缓存计划句柄。

+0

为开源exec计划显示提供链接? – 2011-05-15 02:50:15

+2

@Chad肯定... http://data.stackexchange.com/about – 2011-05-15 04:54:47

+0

谢谢,很有帮助。 :d – 2011-05-15 14:08:39