使用Linq to SQL时,有一种很好的方法来计算SQL查询吗?我真的很喜欢日志记录功能,但如果你能以某种方式计算查询时间,那就太棒了.有任何想法吗?
正如两个人已经说过的那样,SQL Profiler是用于此的开箱即用工具.我不想成为一个回声,但我想详细说明一下:它不仅提供了来自SQL Server的实际时序(而不是来自应用程序端的网络i/o,连接和连接的时序)池时间被添加到蛋糕中)但它也为您提供[通常更重要的] I/O统计数据,锁定信息(根据需要)等.
I/O统计信息很重要的原因是,在消耗过多的服务器资源时,非常昂贵的查询可能会快速运行.例如,如果执行的查询经常遇到大型表,并且没有匹配的索引导致表扫描,则受影响的表将由SQL Server缓存在内存中(如果可以).这有时会导致相同的查询以极快的速度执行,而实际上它会通过占用服务器资源来损害系统/ app/db的其余部分.
锁定信息几乎同样重要 - >对于单个记录执行PK查找的微小查询可能由于锁定和阻塞而导致错误的计时.我在某个地方看到这个网站在其早期测试版的日子里一直受到僵局的困扰.SQL Profiler是您识别和解决由锁定引起的问题的朋友.
总结一下; 您是否使用L2S,EF,普通ADO - 如果您想确保您的应用程序对数据库"表现良好",则在开发和测试期间始终准备好SQL Profiler.它得到回报!
编辑:自从我写了上面的答案后,我为L2S开发了一个新的运行时分析工具,它将两个世界的优点结合在一起; 来自SQL Server,SQL Server执行计划,SQL Server的"缺失索引"警报的I/O统计信息和服务器端计时,结合托管调用堆栈,以便于查找生成某个查询的代码,以及一些高级过滤器选项仅记录满足特定条件的查询.此外,日志记录组件可与应用程序一起分发,以便在实时客户环境中更轻松地进行运行时查询分析.该工具可以从以下位置下载:
http://www.huagati.com/L2SProfiler/您还可以获得免费的45天试用许可证.
此处还发布了更长的背景说明和工具介绍:http:
//huagati.blogspot.com/2009/06/profiling-linq-to-sql-applications.html
...此处提供了使用一些更高级过滤器选项的示例/演练:http:
//huagati.blogspot.com/2009/08/walkthrough-of-newest-filters-and.html
SQL Profiler用于获取查询和时间,以及查询分析器中的执行路径以查看瓶颈所在.