【问题标题】:Running a query using ADODB Connection randomly takes a long time to execute使用 ADODB Connection 随机运行查询需要很长时间才能执行
【发布时间】: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


【解决方案1】:

可能与延迟通过 DNS 解析连接字符串中的主机名有关 - 您是否尝试将 IP 地址而不是主机名放在连接字符串中?

【讨论】:

  • 在连接字符串中更改它会覆盖使用系统 DSN 条目,但是不,我没有将 DSN 更改为使用 IP 而不是服务器名称,但是我认为这不会是这里出现问题的原因,因为两个盒子都在同一个网络中,应该缓存解析主机名,还是不应该缓存?
  • 主机名取自 /etc/hosts 文件,因此很遗憾这与解析 IP 地址无关...
猜你喜欢
  • 2018-07-06
  • 1970-01-01
  • 2016-04-22
  • 2021-12-25
  • 2016-06-17
  • 2021-06-15
  • 2011-01-17
  • 1970-01-01
  • 2016-04-23
相关资源
最近更新 更多