ASP.NET性能:计算SQL请求数

ASP.NET性能:计算SQL请求数,asp.net,database,performance,Asp.net,Database,Performance,我们在客户处部署ASP.NET应用程序时遇到了巨大的性能问题,因为该客户的数据库位于远程位置 我们发现,这是由于页面向数据库进行了大量的单独SQL查询。这从来不是我们注意到的问题,因为通常,web和DB位于同一个本地网络上(低延迟)。但在这种(突然)低延迟配置上,速度非常慢 (请注意,每个sql请求本身都很快,问题在于序列的编号和序列性质) 我要求工程团队能够报告并维护一个“羞耻墙”(或统计数据),告诉我们每个页面的SQL请求数,以便我们可以将其用作参考。他们声称它很贵 任何人都可以告诉我如何能

我们在客户处部署ASP.NET应用程序时遇到了巨大的性能问题,因为该客户的数据库位于远程位置

我们发现,这是由于页面向数据库进行了大量的单独SQL查询。这从来不是我们注意到的问题,因为通常,web和DB位于同一个本地网络上(低延迟)。但在这种(突然)低延迟配置上,速度非常慢

(请注意,每个sql请求本身都很快,问题在于序列的编号和序列性质)

我要求工程团队能够报告并维护一个“羞耻墙”(或统计数据),告诉我们每个页面的SQL请求数,以便我们可以将其用作参考。他们声称它很贵

任何人都可以告诉我如何能够维护或获得这样的报告,既便宜又容易


  • 我们正在使用SQLServer2005
  • 我们混合了我们自己的DB访问层和亚音速
  • 我知道并使用探查器,但这有点像手册。问这里是否有关于如何自动化的提示,或者我只是疯了

如果您使用的是SQL Server,请阅读探查器


从UI运行探查器成本很高,但您可以在没有UI的情况下运行跟踪,这将为您提供所需的信息。

如果您使用的是SQL Server,请阅读探查器


从UI运行profiler成本很高,但您可以在没有UI的情况下运行跟踪,这将为您提供所需的信息。

我过去使用此工具取得了很大成功,不确定价格是否适合您,但它将发现您可能遇到的任何问题:


我过去使用此工具非常成功,不确定价格是否适合您,但它会发现您可能遇到的任何问题:


首先,检查亚音速的功能——它可能有助于减轻第一次切割时的许多压力,而无需对代码进行实质性修改

您可以从SQL server的末尾计划跟踪作业/转储。您还可以运行perfmon计数器来查看应用程序正在服务的数据库请求数


综上所述,我会尝试并鼓励客户将数据库(或数据库的镜像副本)移近您的应用程序。从长远来看,这可能是最便宜的解决方案,具体取决于应用程序的厚度。

首先,检查亚音速的功能——它可能有助于减轻第一次切割时的许多压力,而无需对代码进行实质性修改

您可以从SQL server的末尾计划跟踪作业/转储。您还可以运行perfmon计数器来查看应用程序正在服务的数据库请求数

综上所述,我会尝试并鼓励客户将数据库(或数据库的镜像副本)移近您的应用程序。从长远来看,它可能是最便宜的解决方案,具体取决于应用程序的厚度。

the(以前称为MVC mini profiler;但它适用于所有MVC和Webforms)在这种情况下,这是必须的。如果创建数据库连接的代码具有良好的体系结构,那么几乎任何ASP.NET应用程序都可以运行它

它在每个呈现的页面上生成一个报告,其中包含分析统计信息,包括为请求发送到数据库的每个SQL查询。您可以在页面(左上角)上看到它的运行情况。

在这种情况下(以前称为MVC mini profiler;但它适用于所有MVC和Webforms)是必须的。如果创建数据库连接的代码具有良好的体系结构,那么几乎任何ASP.NET应用程序都可以运行它


它在每个呈现的页面上生成一个报告,其中包含分析统计信息,包括为请求发送到数据库的每个SQL查询。您可以在页面(左上角)上看到它的运行情况。

在任何设计合理的应用程序中,此练习都应该是微不足道的。您可以将其用作确定应用程序代码质量的粗略基准。如果这样的东西“昂贵”,那应该是一个危险信号。这并不能回答您的问题,但我有一个建议,可以在这种情况下提高性能。从远程位置使用db时,创建和关闭连接可能比通常更昂贵。如果您还没有这样做,请添加一些逻辑,使每个页面请求只打开一个db连接。我们的想法是使用一种全局连接,这种连接在第一次查询时自动打开,在调用Page.Unload事件时自动关闭。在任何设计合理的应用程序中,这个练习都应该是微不足道的。您可以将其用作确定应用程序代码质量的粗略基准。如果这样的东西“昂贵”,那应该是一个危险信号。这并不能回答您的问题,但我有一个建议,可以在这种情况下提高性能。从远程位置使用db时,创建和关闭连接可能比通常更昂贵。如果您还没有这样做,请添加一些逻辑,使每个页面请求只打开一个db连接。这样做的想法是使用一个全局排序连接,在第一次查询时自动打开,在调用Page.Unload事件时自动关闭。