7

背景

我们在连接到单个数据库服务器的不同 Web 服务器上拥有许多 Web 应用程序。在过去的几个月里,我们注意到每隔一段时间,我们的 Web 服务器将无法连接到数据库服务器。

我们的环境

我们有几个不同的 Web 环境,一些运行 ColdFusion,另一些运行 .NET。.NET 应用程序既是 Web 窗体又是 MVC。它们跨越从 2.0 到 4.5 的多个版本。ColdFusion 和 .NET Web 服务器都是基于 Windows 的机器。ColdFusion 和 .NET Web 环境都是集群的,一些机器是物理的,而另一些是虚拟的。

我们的数据库服务器是 SQL Server 2008 r2。它包含多个数据库。每个应用程序都有自己的数据库用户,它连接到只允许它访问特定数据库的服务器。

其他事实

  • 当我们注意到问题时,它们会以短时间的形式出现,持续时间从几秒钟到几分钟不等。
  • 当我们注意到问题时,突发包含来自多个不同应用程序的错误,而不仅仅是一个应用程序。
  • 当我们注意到问题时,突发包含来自不同 Web 环境的应用程序的错误。(这让我们认为我们可以排除应用程序本身的问题)
  • 连接问题的爆发发生在白天和晚上的不同时间。它们并不总是在高使用率期间。
  • 我们已经监控了诸如用户连接数、内存、IO、CPU 使用率等内容......我们没有看到峰值或任何其他可能指向问题的东西。
  • 我们已经在 web 和 db 服务器上安装了 wireshark,希望能在没有任何成功的情况下解决问题。

问题

  1. 有人对我接下来应该去哪里有建议吗?
  2. 是否存在可能导致此问题的数据库属性?
  3. 有没有办法以更好的方式“监控”数据库和 Web 服务器之间的连接?
  4. 应用程序端有什么可以做的以更好地了解正在发生的事情吗?

应用程序捕获的错误

  • .NET 错误
    • 建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供者:命名管道提供者,错误:40 - 无法打开与 SQL Server 的连接)
    • 超时已过。在操作完成之前超时时间已过或服务器没有响应。
    • 从服务器接收结果时发生传输级错误。(提供者:TCP 提供者,错误:0 - 信号量超时期限已过。)
    • 超时已过。在从池中获取连接之前超时时间已过。这可能是因为所有池连接都在使用中并且达到了最大池大小。
  • ColdFusion 错误
    • 执行数据库查询时出错。与主机的 TCP/IP 连接失败。java.net.ConnectException: Connection timed out: connect
      第38行出现错误。
    • 执行数据库查询时出错。Connection reset by peer: socket write error
      错误发生在第 91 行。
    • 执行数据库查询时出错。尝试建立连接超时
      错误发生在第 38 行。
4

1 回答 1

1

在 CF 中,我曾经遇到过您所看到的问题。我在一台服务器上有 CF,在另一台服务器上有 sql 2008 r2。我会看到您在下面发布的 CF 错误。为了帮助追踪到网络错误,我写了这样的东西:

1)创建了一个down.bat

tracert serverip

2)然后我<cftry><cfcatch>在查询周围加上一个。

当查询生成错误时,我将执行

<cfexecute name="C:\path\to\down.bat" variable="log" timeout="60" />
    <cfmail to="ME" from="Server" subject="SQL DOWN">

    Server Debugging Info:
    ------------------------------------------------------------    
    #now()#

    #cfcatch.Detail#

    #cfcatch.Message#

    #log#        

    </cfmail>
</cfexecute>

这帮助我解决了最终成为数据中心硬件的情况。

于 2012-10-24T15:57:05.933 回答