【发布时间】:2011-11-24 18:52:33
【问题描述】:
我遇到了一个似乎以某种方式连接到 Web 服务器配置的问题,并导致随机查询需要很长时间才能执行。该应用程序是使用旧的普通经典 ASP 和 ADODB 连接创建的。
场景如下:
- 在开始处理每个 HTTP 请求时,在脚本中打开了一个连接
- 此连接用于对驻留在单独框中的 SQL Server 执行查询。使用 conn.Execute。之后连接不会关闭
- 通常有几到几十个 conn.Execute 在单个 ASP 页面中
直到最近,所有的 conn.Execute 都开始运行良好,完全随机执行。
- 区别在于,例如15 毫秒的正常执行时间与 2000 毫秒的长执行时间
- 在 SQL Server 端,Profiler 没有显示更长的查询执行时间,所以肯定有什么东西阻塞了 conn.Execute 请求
在实施了每次 conn.Execute 后关闭连接的正确做法后,问题就会消失。然而,正如我之前所说,直到最近,一切都完美无缺。这个网络应用程序相当大,重写它以正确关闭和重新打开连接需要一些时间。我需要一个短期的解决方案。
我的猜测是它可能与连接池大小有关,但这不是 ADO.NET,因此我不确定是否应该考虑连接池问题。在 SQL Server 端,对服务器的并发连接数没有限制。
我需要一些提示。集思广益可能的想法。
【问题讨论】:
-
提示:我最终发现,当通过系统 DNS(ODBC、TCP/IP 传输)建立连接时,问题就在那里。当我在连接字符串中强制使用 SQLNCLI 提供程序时(使用 Provider=SQLNCLI),问题就消失了。太好了,但为什么它首先会发生......?
-
最近是否有应用到服务器的补丁或更新?
-
是的,有。这是一个由第三方在远程位置托管和管理的专用盒子。好点,忘了在我原来的问题描述中添加这个,我以为我做到了。
-
刚刚注意到,在实施了每次 conn.Execute 后关闭连接的正确做法时,问题并没有消失。它发生的频率要低得多,但仍然可以观察到。
标签: sql-server asp-classic adodb