6

Jeff 在其中一个播客中提到,他经常做的一件事是对数据库调用进行检测,这样他就可以判断是哪些查询导致了缓慢等。这是我过去使用 SQL Profiler 测量过的,但是我对其他人使用什么策略将其包含在应用程序中很感兴趣。

这仅仅是在每个数据库调用中包含一个计时器并记录结果的情况,还是有一种“更简洁”的方法?也许已经有一个框架可以为您执行此操作,或者是否有一个我可以在例如 Linq-to-SQL 中启用的标志,它可以提供类似的功能。

我主要使用 c#,但也有兴趣查看来自不同语言的方法,并且我对通过 SQL Profiler 等数据库平台方法执行此操作的“代码”方式更感兴趣。

4

7 回答 7

1

如果查询不仅仅是单个表上的简单 SELECT,如果我在 MySQL 或 PostgreSQL 上,我总是通过 EXPLAIN 运行它。如果您使用的是 SQL Server,则 Management Studio 有一个基本相同的显示估计执行计划。查看引擎将如何访问每个表以及它将使用哪些索引很有用。有时它会让你大吃一惊。

于 2008-08-12T12:11:23.910 回答
1

记录数据库调用、总时间和应用程序中返回的记录数(字节)很有用,但它不会为您提供所需的所有信息。

它可能会向您显示您没有预料到的使用模式。它可能会显示您使用“逐行”访问而不是“基于集合”操作的位置。

最好使用的工具是 SQL Profiler,它可以分析“读取”的数量与 CPU 和持续时间的关系。您希望避免高 CPU 查询、高读取和长持续时间(呃!)。

“按读取分组”是一个有用的功能,可以将最讨厌的查询带到顶部。

于 2008-08-12T13:13:32.913 回答
0

如果您喜欢 Firebird,您可能需要观看sinatica.com
我们将很快为 Firebird DBA 推出实时监控工具。

< /无耻插件>

于 2008-08-24T16:32:42.887 回答
0

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

于 2008-08-12T12:27:58.137 回答
0

我本以为这里要问的重要问题是“您使用的是什么数据库平台?”

例如,在 Sybase 中,安装MDA 表可能会解决您的问题,它们提供了从过程调用使用情况到平均逻辑 I/O、CPU 时间和索引覆盖率的一大堆统计数据。它可以像你想要的那样聪明。

于 2008-08-12T13:54:22.410 回答
0

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

如果您使用的是 MySQL 或 Postgre,则有各种工具可以实时查看查询活动,但我还没有找到像 SQL Profiler 那样好的工具来测量一段时间内的查询性能。

我想知道是否有(或应该有?)类似于ELMAH的东西,它只是插入并为您提供信息而无需付出太多额外的努力?

于 2008-08-12T18:26:13.297 回答
0

如果您使用 Hibernate(我使用 Java 版本,我想 NHibernate 也有类似的东西),您可以让 Hibernate 收集有关许多不同事物的统计信息。参见,例如:

http://www.javalobby.org/java/forums/t19807.html

于 2010-05-25T19:18:02.230 回答