0

我们拥有一个支持SQL Server后端的.net企业应用程序。.net集成SQL性能分析

现在我们的一些大客户正在遇到一些基于SQL的性能瓶颈。我们已经应用尽可能多的全球索引,我们可以看到哪些可以提高性能,但是我们不断吸引客户推动我们作为最大用例所经历的事情,而且没有什么可以说这是错误的。

这意味着什么能够提供查看更大的客户和为他们的数据库提供索引的能力。在这一点上,我只能看到这种情况下可以实现(因为所有客户都会以不同的方式使用系统)。

我的想法是以某种方式在客户数据库上运行一段时间的SQL事件探查器,然后将此数据抽取到数据库中的表中,然后在此期间分析数据并应用索引以提高性能。

Enterpise应用程序是asp.net mvc。有谁知道我们是否可以添加.net代码,将通过连接字符串从asp服务器启动SQL探查器到数据库和服务器,然后将结果抽取到表中?

或者我们可以采取其他方法的任何建议?

回答

2

SQL Server Profiler只是一个图形界面,用于显示SQL Trace API处理的所有事件。可以通过SQL存储过程和.Net代码启动和捕获跟踪数据。 以下是关于如何操作的两个示例。它有点老,但我已经设法按照说明启动sql trace throm.net代码。

http://blogs.msdn.com/b/sqlprogrammability/archive/2006/05/26/receiving-profiler-events.aspx

这里是由分析器执行启动追踪存储过程的列表。你可以直接运行它们。 http://technet.microsoft.com/en-us/library/ms187346.aspx

0

我不会因为开销而推荐以编程方式启动跟踪。

相反,从SQL Server获得接近追踪质量的数据的开销更低的方法是计划高速缓存(也称为过程高速缓存)。无论何时将SQL语句传递到SQL Server(甚至作为存储过程),SQL Server都必须为该语句构建执行计划。它将计划缓存在内存中以避免重复构建它们,并跟踪每个计划的使用情况。您可以获得有关调用次数,CPU运行时间,CPU运行时间以及逻辑读取次数等信息。

您可以从我们的独立计划缓存查询开始:http://www.brentozar.com/responder/get-top-resource-consuming-queries/如果您想查看哪些查询正在读取最多数据,则按逻辑读取递减进行排序 - 这些通常是索引编制的最佳候选项。

如果你想更进一步,请查看我的免费sp_AskBrent®。这是一个存储过程,它接收计划缓存样本(加上Perfmon计数器,存储度量标准等),等待5秒钟,取另一个样本,然后比较差异。结果告诉你为什么SQL Server现在很慢。

1

正如user907246所述,SQL Profiler只是图形界面,用于显示由SQL Server Trace API收集的跟踪信息,从而可以在线获取和分析数据。但是,SQL Profiler会在服务器上造成巨大的负载,建议不要在生产环境中启动。

代替探查的服务器端跟踪可以被配置和用作这里(http://technet.microsoft.com/en-us/library/cc293613.aspx)中所述。您可以指定跟踪文件大小,文件汇总,跟踪过滤器和其他重要标准。服务器跟踪,而不是SQL Porfiler的使用可以减少服务器的负载,并允许收集相同的信息卸载分析:工具的大量可用于离线跟踪观,恩。 QURE ANALYZER from DBSofic - 免费的产品设计用于不同尺寸的能力组和过滤数据的离线跟踪分析并找出性能瓶颈。

在此,在SQL Server 2008(http://technet.microsoft.com/en-us/library/bb630354(v=sql.105).aspx)将取代SQL跟踪在未来的版本中加入了扩展的事件。有关配置和使用扩展事件的其他信息可以在这里找到:http://blogs.msdn.com/b/extended_events/

-1

您所描述的是SQL Server的Database Engine Tuning Advisor背后的目的。使用SQL Server Profiler运行跟踪,然后将其用于输入数据库引擎优化顾问。如果你真的因为SQL而遇到瓶颈,那么它会告诉你。否则,你将不得不开始考虑数据库和应用程序操作系统上的内存利用率,磁盘IO,CPU%等等。