2008-08-12 80 views
6

杰夫的播客之一提到,他总是不放在仪器的数据库调用,以便他能告诉哪些查询造成缓慢的原因之一等。这是我一直在测量过去使用SQL Profiler,但我对其他人用什么策略将其作为应用程序的一部分加入其中感兴趣。插入检测数据库访问

难道仅仅包括在每个数据库调用一个计时器并记录结果的情况下,还是有做这件事的“整洁”的方式?也许有一个框架可以为你做到这一点,或者有一个我可以在例如Linq-to-SQL将提供类似的功能。

我主要使用C#,但也有兴趣在看到来自不同语言的方法,我会更感兴趣,这样做对像SQL事件探查器数据库平台方法的“代码”的方式。

回答

1

如果查询,不只是一个简单的SELECT在一个表上,我总是运行它通过EXPLAIN如果我对MySQL或PostgreSQL。如果您使用的是SQL Server,那么Management Studio的显示预计执行计划本质上是相同的。了解引擎如何访问每个表以及它将使用哪些索引是非常有用的。有时它会让你感到惊讶。

0

如果您在SQL Management Studio中编写查询,您可以输入:SET STATISTICS TIME ON,并且SQl Server会告诉您查询的各个部分花费多长时间来解析,编译和执行。 您可以通过处理SqlConnection类的InfoMessage事件来记录此信息(但我认为使用SQL Profiler更容易)。

1

记录数据库调用,总时间和记录数(字节数)在应用程序中返回是有用的,但它不会给你所有你需要的信息。

它可能会显示您不期待的使用模式。它可能会显示您使用“逐行”访问而不是“基于集合”操作的位置。

使用最好的工具就是SQL事件探查器和分析的“读”与CPU和持续时间的数量。你想避免高CPU查询,高读取和长期(杜!)。

“按阅读分组”是一项非常有用的功能,可以将最棘手的问题带到最前面。

0

我原以为这里要问的重要一点是“你在用什么数据库平台?”

例如,在Sybase中,安装MDA tables可能会解决您的问题,它们提供了从过程调用使用到平均逻辑I/O,CPU时间和索引覆盖范围的大量统计信息。它可以像你想要的那样聪明。

0

我确定在应用程序运行时看到了使用SQL Profiler的价值,而EXPLAIN或SET STATISTICS会为您提供有关单个查询的信息,但是有没有人经常将测量点放入其代码中以收集有关数据库查询的信息正在进行中 - 例如,一个对表格执行罚款的查询,但随着行数增长,变得越来越慢。

如果你使用MySQL或Postgre有各种工具实时查询看到活动,但我还没有发现因为SQL事件探查器为好测量一段时间的查询性能的工具。

我想知道是否存在(或应该?)类似于ELMAH的东西,它只是插入并为您提供信息而无需额外的工作?

0

如果你进入火鸟,你可能想看sinatica.com
我们即将推出针对Firebird DBA的实时监控工具。

< /无耻插头>