2009-08-19 85 views
1

我的应用程序是在经典的asp上开发的,但也使用asp.net,因为我正在将应用程序迁移到.Net上。它使用SQL服务器作为数据库,并托管在Windows Server 2003上。SQL服务器超时

现在的问题是应用程序长时间继续工作得很好,但过了一段时间后,SQL Server发出超时错误,它可以满足任何请求。即使重新启动我的SQL服务器甚至IIS时,它也不会得到修复,但最终我必须重新启动服务器,每次只修复问题。

任何想法可能会导致这个问题?为了给出一个明智的想法,该网站在高峰时段被大约300人使用。

任何想法可能会导致这个问题?为了给出一个明智的想法,该网站在高峰时段被大约300人使用。我确实关闭了连接,每个页面上的结束代码都会关闭连接。如果在结束页面之前发生错误,则预期处理程序将关闭连接。所以我确信关闭连接不是问题。如果我看到sql日志,那就没有开放连接。我们的服务器,只有一个盒子,有SQL Server,IIS,iMail(我们的邮件服务器)。在我重新启动SQL Server之后,它没有解决问题。只有重新启动Windows Server,它工作。从性能来看,IO的使用率非常高。有什么建议吗?

感谢,

回答

1

听起来很像是有一种非托管资源,你没有正确清理。我们没有足够的信息来确切知道该资源可能是什么,所以我们所能做的只是猜测。

我的第一个直觉是数据库连接,除非重新启动,重新启动sql server应该修复它,如果是这种情况。在列表中的下一个是文件句柄和线程,所以如果你做任何多线程工作或额外的文件io,这将是看点。请记住,在ASP.Net中,using声明(不是指令)是你的朋友。

2

最起码,你在关闭到数据库的连接,一旦你在代码中使用它呢?另外,你的连接字符串是怎样的?它使用连接池吗?

编辑:我看到了您的意见。是否有待执行的交易?

0

首先,你需要跟你的DBA ......他们可以检查打开的连接,表锁,缓慢运行的查询的数量等

我的直觉反应是,你不关闭你的某处连接,或连接池太低。

0

你在做定期的数据库维护吗?重建/碎片整理索引,重新计算统计信息(除非它设置为自动执行此操作)。检查交易日志的大小等。