如何使用 LINQ to SQL/ADO.NET 获取执行计划
是否可以以编程方式获取 LINQ to SQL 或 ADO.NET 查询的执行计划以在调试信息中显示?如果是这样,怎么办?
Is it possible to get the execution plan of a LINQ to SQL or ADO.NET Query programatically for displaying in debug information? If so, how?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
当然,您需要两件事。
DbConnection
、DbCommand
和DbDataReader
的自定义实现。您可以使用它来拦截发送到数据库的所有 SQL。您基本上对其进行了设置,以便有一个记录所有运行的 SQL 的层。 (我们计划在接下来的几个月内开源该领域的一些东西,敬请关注)一种显示数据意义的方法,它恰好是开源的:https://data.stackexchange.com/stackoverflow/s/345/how-unsung-am-i (请参阅包含执行计划选项)
另一种方法是通过查看 proc 缓存来进行事后诊断。 sys.dm_exec_query_stats 包含可以扩展的缓存计划句柄。
Sure, there are 2 things you will need.
A custom implementation of
DbConnection
,DbCommand
andDbDataReader
. You can use that to intercept all the SQL sent to the DB. You basically set it up so you have a layer that logs all the SQL that is run. (we plan to open source something in this area in the next few months, so stay tuned)A way to display an make sense of the data, which happens to be open source here: https://data.stackexchange.com/stackoverflow/s/345/how-unsung-am-i (see the include execution plan option)
Another approach is to do the diagnostics after the fact by looking at the proc cache. sys.dm_exec_query_stats contains cached plan handles which you can expand.