分析皇宫的查询和它们的执行计划是特别重要的是由于疯狂的SQL,有时可以创建。

我经常发现,我需要追踪一个特定的查询,并有一个很难找到在查询分析。我经常这样做在一个数据库,其中有很多运行的事务(有时候,生产服务器)-所以只打开探查是没有好处。

我也找到了想要使用属性,以跟踪不够,因为它不给我SQL我实际上可以执行自己。

我最好的战略迄今为止是添加一个随机号码给我的查询和筛选用于在跟踪。

皇宫:

where o.CompletedOrderID != "59872547981"

探查过滤器:

'TextData' like '%59872547981'

这个工作很好用几个注意事项:

  • 我必须要小心,记住要删除的标准,或捡东西,不会影响的查询计划太多。是的,我知道留下这是在自寻烦恼。
  • 我可以告诉,虽然,即使有这种方法,我需要启动一个新的跟踪每一个皇宫的查询,我需要跟踪。如果我去'的文件>属性'的现有跟踪我无法改变的过滤标准。

你不能击败运行查询在你的程序,并看到它在探查没有任何额外的努力。只是希望别人想出了一个更好的方式,或至少提出一个较少的'危险'标记来搜索过查询在一个柱。

有帮助吗?

解决方案

搞乱其中的条款也许不是最好的事情要做,因为它可以而且将会影响执行计划对于您的查询。

做的东西时髦的与投入匿名的课程,而不是使用一个独特的静态的列名或东西,将不会影响执行计划。(这样,你可以把它完整地保留在生产码万一你以后需要做任何分析的生产码...)

from someobject in dc.SomeTable
where someobject.xyz = 123
select new { MyObject = someobject, QueryTraceID1234132412='boo' }

其他提示

你可以使用皇宫SQL调试图- http://weblogs.asp.net/scottgu/archive/2007/07/31/linq-to-sql-debug-visualizer.aspx 看看它在你的看窗口。

或者您可以使用 DataContext.GetCommand(); 看到SQL之前执行。

你还可以看看 DataContext.GetChangeSet() 查什么要插入/更新或删除。

你可以有你的属性登出的原SQL,然后您可以搜索的分析器来检查业绩。

using System.Diagnostics.Debugger;

yourDataContext.Log = new DebuggerWriter();

所有的你的SQL查询将显示在调试器输出窗口。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top