4

我喜欢分析 Java/.Net 应用程序以发现性能瓶颈或内存问题的方式。例如,通过查看调用树以及每个方法的执行时间和调用计数,很容易找到性能瓶颈。在 SQL Server 中,我有存储过程调用其他依赖于视图的存储过程,这类似于 Java/.Net 方法调用其他方法。所以看起来同一种探查器在这里会很有帮助。然而,我四处张望,一个也找不到。是否有人知道此类工具,无论是用于 SQL Server 还是任何其他 DBMS?

更新:感谢您对 SQL Server Profiler 的回复,但此工具非常有限。看看截图

4

8 回答 8

6

查看SQL Nexus 工具。这有一些关于识别瓶颈的好报告。SQL Nexus 是一种工具,可帮助您确定 SQL Server 性能问题的根本原因。它加载和分析 SQLDiag 和 PSSDiag 收集的性能数据。它可以显着减少您手动分析数据所花费的时间。

在 Inside SQL 2005 的一本书(可能是 T-SQL 查询)中,有一种很酷的技术,作者将 SQL 分析器输出转储到表或 excel 文件中,并应用枢轴来获取与您的格式相似的输出截屏。

我还没有看到任何内置的 SQL 工具可以为您提供这种分析。另一个有用的帖子

于 2008-09-30T15:42:40.960 回答
3

除了@Galwegian 的评论中提到的 SQL Server Profiler 之外,还可以在运行查询时检查您的执行计划。

http://www.sql-server-performance.com/tips/query_execution_plan_analysis_p1.aspx
http://en.wikipedia.org/wiki/Query_plan

于 2008-09-30T15:14:56.470 回答
2

关于 SQL Server 探查器的另一个完整线程:

识别 SQL Server 性能问题

我理解您在说什么,但通常情况下,数据库优化是在更细粒度的级别上进行的。如果数据库活动是由客户端驱动的,您应该能够使用现有的客户端分析器来获取每个步骤的总时间,然后解决容易实现的目标(无论是否在数据库中)。

当您需要详细分析特定数据库步骤时,可以使用分析器和跟踪。

通常,数据库访问具有一定的粒度,该粒度是在单个基础上解决的,并且数据库活动与所有类型的用户访问都不是线性的,而程序分析器通常是对代码的线性路径进行分析。

于 2008-09-30T15:15:23.380 回答
1

如前所述,SQL Server Profiler 非常适合检查您的程序传递给 SQL 等的参数。如果您需要,它不会显示执行树。为此,我能想到的就是使用 Show Plan 来查看运行时到底执行了什么。例如,如果您正在调用调用视图的 sp,Profiler 只会显示 sp 已执行以及传入的参数。此外,Windows 性能监视器具有特定于 SQL Server 的大量运行时性能指标。您可以在服务器上运行它,或远程连接。

于 2008-09-30T15:16:58.540 回答
1

要查找性能瓶颈,您可以使用数据库引擎优化顾问(在 SQL Server Management Studio 的工具菜单中找到。它提供优化查询的建议并自动为您优化它们(例如创建适当的索引等)。

于 2008-09-30T15:21:54.410 回答
0

您可以使用 S ql Profiler - 它涵盖了分析方面,但我倾向于将其更多地视为一种日志记录工具。为了诊断性能,您可能应该只查看查询计划

于 2008-09-30T15:14:11.060 回答
0

有 sql server profiler,但尽管有它的名字,但从你的问题的声音来看,它并没有做你想做的事。它将向您显示数据库中正在进行的所有调用的详细视图。最好对整个应用程序进行故障排除,而不是一次只处理一个存储过程

听起来您需要在查询分析器中查看查询/spoc的执行计划,这将为您提供类似于您正在寻找的数据的东西。

于 2008-09-30T15:16:46.343 回答
0

正如几个回复所提到的,SQL Profiler 将显示您的要求。您必须确保打开事件 SP:StmtCompleted,它位于 Stored Procedures 组中,如果您还想要查询计划,请打开 Showplan XML Statistics Profile,它位于 Performance 组中. XML 计划最后一个为您提供图形描述,并显示计划中每个步骤处理的实际行。

如果分析器使您的应用程序变慢,请尽可能对其进行过滤并考虑转到服务​​器端跟踪。

HTH安迪

于 2008-12-16T17:16:01.717 回答