2010-09-26 38 views
5

我的asp.net应用程序遇到性能问题。有时需要客户端30-40秒来执行一个命令,有时需要3-4秒。我试过SQL Profiler,但没有看到任何问题。在客户尝试的情况下,我无法在我身边复制这个问题。ASP.NET会话性能

我在想,它可能会与我使用的会话变量有关。我正在使用它们中的很多来在页面内传递信息。但是我不清楚它们。

如果我清楚他们会帮助吗?如果是这样会影响其他用户吗?还是只为该用户清楚?

任何帮助表示赞赏。

+0

当发生这种情况时,您能否向我们提供有关服务器负载的更多信息,包括cpu使用情况和内存使用情况?当请求突然开始超过30秒时,我通常会查找资源死锁或超时。 – sisve 2010-09-26 15:13:12

+2

这些类型的问题真的很难回答。什么是硬件?多少个Web服务器用户?每个用户的会话中究竟有多少数据(你能量化“他们中的很多”)?多少个SQL服务器用户?平台/硬件/网络吞吐量和大约一百万其他因素(糟糕的代码,糟糕的体系结构,一天中的时间,负载平衡,缓存等等)的差异会影响性能。环境如何? – 2010-09-26 15:18:23

+0

你使用什么会话状态模式?即inproc,sqlserver或stateserver?后两者将使用比前者更多的资源,尽管它们也更有弹性。 – 2010-09-26 15:36:42

回答

0

会话等会话变量是用户特定的,因此清除它们不会影响其他用户。

保持你的会话光线肯定会有助于提高性能。

0

建议在正常操作过程中,ASP.NET会话不会影响您的SQL Server往返时间。假设什么都没有被存储在与你的数据层相关的会话中(即静态SqlConnection对象)

如果你看到那些很长的时间(30-40秒),试着确定性能是否是一个渐进的放缓, SQL Server往返时间是孢子的。

考虑实施日志记录以帮助确定模式。开始写入磁盘,每天/小时一个文件,如果您认为合适的话。

  • SQL命令的开始时间开始。记录您传递的查询/数据集/相关信息。
  • SQL命令的结束时间。
 
--- Executing statement SELECT * FROM Customers 
--- Start 08:55.44 
--- End 08:55.45 
=== Roundtrip was 1 second SELECT * FROM Customers 

小时/天/周后,打开日志,以寻找“往返”,或许写一个程序来解析这些日志给你。

1

在基于SQL Server的会话存储的.NET 2.0实现中的某个存储过程中存在记录锁定问题。它看起来像MS纳入.NET 4.0版本中的修复。

到这里看看: http://sanjevsharma.blogspot.com/2008/03/improving-aspnet-session-state-database.html

我99%肯定可以运行4.0版本aspnet_regsql -ssadd的,而仍运行ASP.NET 2.0反对。我记得做了2.0与4.0 SQL脚本的差异,上面的修复是唯一真正的区别。 MS'修复程序的实施比上面的链接稍微好一些(并且明显基于)。

0

如果问题似乎不是您的数据库,您可以尝试分析您的Web应用程序并查看瓶颈位置。很难再现像您在生产中看到的可变问题(4-40秒延迟),但有多少方法调用正在发生以及哪些消耗最多执行时间的结果可能会提供一些提示。

一些在What Are Some Good .NET Profilers?

提到我个人而言我的EQATEC探查的忠实粉丝。

0

如果你在这个尺度上有变化,你很可能会看到某种锁定或争用问题。根据时间安排以及配置文件时发生了什么,如果事实如此,您可能看不到SQL锁定问题。尝试监视perfmon中的锁定度量标准以查看是否存在可疑内容,并且考虑系统中还有哪些内容会导致任何类型的锁定或延迟等待时间。

0

您是否尝试启用ASP.NET跟踪日志记录并查看调用堆栈中的加载时间?我已经使用了这一点来诊断ASP.NET性能瓶颈。如果你不熟悉的trace.axd,您可以通过配置文件

<trace enabled="true" /> 

启用此配置设置启用它可以让你浏览你的网站的根目录下的trace.axd和查看最近10个交易详细。您可以通过该跟踪元素启用更大的结果集,滚动结果集和一堆其他漂亮的跟踪选项。