在经典的asp / sql server网站中查找性能瓶颈

时间:2008-12-09 12:39:51

标签: performance asp-classic

我有一个古老的经典asp / sql服务器应用程序,即使负载不是很大,也会不断抛出500个错误/超时。一些数据库查询非常密集,但没有什么可以导致它崩溃。

我可以在服务器上安装哪些好的软件,这些软件会精确显示asp或DB中的瓶颈所在?

5 个答案:

答案 0 :(得分:2)

您可以尝试一些工具:

答案 1 :(得分:2)

超时发生在哪里?当ASP连接/执行sql时它是否在行?如果是这样,您的问题是与数据库服务器的连接或数据库本身。在MSSQL中加载SQL事件探查器以查看查询所需的时间。也许这是由于数据库中的锁定。

您使用交易吗?如果是这样,请确保它们长时间不锁定您的数据库。确保在ADO中使用事务,而不是在整个ASP页面上使用事务。您还可以通过在表上使用WITH(NOLOCK)提示来忽略SQL选择中的锁定。

确保使用索引优化数据库。

还要确保您在尽可能短的时间内与DB保持联系,例如(例如,不工作的代码):conn.open; set rs = conn.execute(); rs.close; conn.close。因此,在保持与DB打开的连接的同时,将记录集存储在变量中而不是循环。一个好方法是在ADO中使用GetRows()函数。

始终显式关闭并将ADO对象设置为空。这可能导致与DB的连接保持打开状态。

启用连接池。

如果您正在使用它们,请在global.asa中加载ADO常量

不要在会话或应用程序范围中存储任何对象。

升级到最新版本的ADO,MDac,SQL Server服务包等。

您确定服务器可以处理负载吗?也许升级呢?它是在共享主机上吗?也许你的应用不是问题。

通过从1行到最后一行计时来测量脚本性能非常简单。这样您就可以识别运行缓慢的页面。

答案 2 :(得分:1)

您是否尝试在服务器上运行SQL Server Profiler?它将突出显示从应用程序访问数据库的任何意外活动,以及帮助识别性能不佳的查询。

答案 3 :(得分:1)

如果您对数据库查询需要密集而感到高兴,那么您可能需要在使用这些查询的页面上设置更合适的超时。

将Server.ScriptTimeout设置为更大的值,您可能还需要在脚本使用的ADO Command对象上设置超时。

答案 4 :(得分:0)

以下是我接近它的方法。

  1. 查看服务器上正在运行的任务。哪个占用更多的CPU时间 - SQL服务器还是IIS?大多数时候,它将是SQL服务器,它肯定听起来像你的帖子。很少有ASP应用程序实际上在ASP方面进行大量处理,而不是COM或SQL方面。

  2. 使用SQL事件探查器查看命中数据库服务器的所有查询。

  3. 首先处理低调的果实。通常,您会遇到一些“问题”查询,这些查询会经常访问数据库并且会花费大量时间。处理这些。 (在软件开发方面,有一个道理是,10%的代码会占用90%的执行时间......)

  4. 除了使用SQL事件探查器和查询分析器/ SQL Studio查看查询成本并执行正常的SQL性能检测工作之外,您可能还需要检查数据库调用是否将过多的数据返回到ASP代码。我已经看到了无害的查询向ASP返回了大量不需要的数据的情况 - 经典(“select * from tablename”)类型的查询由懒惰/没有经验的程序员编写,当程序员真正需要1时返回10,000个大行从1排的字段。我提到这种特殊情况的原因是因为这些类型的查询通常在SQL方面的执行时间较短,查询成本较低,因此可以忽略不计。