追踪数据库连接问题

Jas*_*son 7 asp.net error-handling coldfusion database-connection sql-server-2008-r2

背景

我们在连接到单个数据库服务器的不同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使用率等等...我们还没有看到尖峰或其他任何可能指向问题的东西.
  • 我们已经在网络和数据库服务器上安装了wireshark,希望能够在没有任何成功的情况下解决问题.

问题

  1. 有没有人建议我下一步该看什么?
  2. 是否存在可能导致此问题的数据库属性?
  3. 有没有办法以更好的方式"监控"数据库和Web服务器之间的连接?
  4. 是否有任何可以在应用程序方面完成以更好地了解正在发生的事情?

应用程序捕获的错误

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

ste*_*eve 1

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

1)创建一个down.bat

tracert serverip
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

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