如何分析从ASP.NET应用程序运行的一些查询?我工作的软件因数据库运行速度极慢(我认为)。这些表有索引,但它仍然拖延,因为它正在处理如此多的数据。我怎样才能看到我可以在哪些方面进行一些小的改进,希望能够带来更大的速度提升?

编辑:我想补充一点,网络服务器喜欢在这些长时间查询期间超时。

有帮助吗?

解决方案

Sql Server有一些很好的工具可以帮助您解决这种情况。这些工具内置于Management Studio(以前称为企业管理器+查询分析器)。

使用SQL事件探查器向您显示来自Web应用程序的实际查询。

复制每个问题查询(占用大量CPU时间或IO的问题)。使用“显示实际执行计划”运行查询。希望您会看到一些缺失的明显索引。

您还可以运行调优向导(该按钮位于“显示实际执行计划”旁边。它将运行查询并提出建议。

通常,如果您已经有索引并且查询仍然运行缓慢,则需要以不同的方式重新编写查询。

将所有查询保存在存储过程中可以使这项工作更多更容易。

其他提示

要配置SQL Server,请使用 SQL Profiler

您可以使用Red Gate的 ANTS Profiler 进行个人资料你的代码。

另一个与ASP.NET很好地配合使用的.NET分析器是 dotTrace 。我亲自使用它,并在我的代码中发现了很多瓶颈。

我相信您可以获得分析查询所需的答案。但是,这是性能调优中最容易的部分。一旦你知道它是查询而不是网络或应用程序,你如何找到并解决问题?

性能调优是一件复杂的事情。但是首先要看一些地方。你说你要返回大量数据?您是否返回的数据超出了您的需求?你真的只返回你需要的列和记录吗?使用select *返回100列可能比返回实际使用的5列慢得多。

您的索引和统计信息是最新的吗?如果你有一段时间没有这样做,请查看如何更新statisistcs并重新索引BOL。您是否在所有连接字段上都有索引? where子句中的字段怎么样。

你用过光标吗?你使用过子查询吗?工会怎么样 - 如果你正在使用它可以改成联合所有吗?

您的查询是否可以搜索(如果不熟悉该术语,则为Google。)

当你可以使用group by时使用distinct吗?

你得到锁?

还有许多其他事情要看这些只是一个起点。

如果我想调整特定查询或存储过程,我发现在查询之前打开统计信息非常有用:

SET STATISTICS TIME ON
SET STATISTICS IO ON

在查询分析器中打开统计信息时,统计信息将显示在“结果”窗格的“消息”选项卡中。

IO统计数据对我来说特别有用,因为它让我知道我是否需要索引。如果我从IO统计信息中看到高读取计数,我可能会尝试向受影响的表添加不同的索引。当我尝试索引时,我再次运行查询以查看读取计数是否已经下降。经过几次迭代后,我通常可以找到所涉及表的最佳索引。

以下是这些统计命令的MSDN链接:

设置统计时间

SET STATISTICS IO

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top