来自特定客户端的SQL Server临时连接失败

时间:2017-03-30 09:55:44

标签: sql-server entity-framework

我们的软件客户端部署显示间歇性SQL服务器连接失败,我们正在努力理解它们。

我们的系统包括一个SQL Server DB(2012)和14个相同的引擎,每个引擎都安装在Windows 2012 VM上。其中每个都是从同一个模板创建的,因此它们应该是相同的。引擎由Windows服务组成,该服务通过从表中读取单行来在启动时连接到数据库。如果连接失败,他们将等待几秒钟再试一次,直到他们得到连接。

在这种特殊情况下,由于Windows Update,VM全部重新启动。 (SQL服务器在大约12小时之前进行了更新/重新启动)。他们在几分钟之内上网了。 12台发动机启动没有任何问题。但是,其中两个无法通过以下方式连接到DB:

  

“底层提供商在Open上失败了。”

然后这两个引擎开始进行轮询,并继续发出此错误数小时。其余的发动机已经启动并且很好。我们也有一个代理服务,整个访问数据库并没有显示任何连接问题。

当客户端注意到这个问题时,他们重新启动了两个问题虚拟机上的引擎服务,连接到数据库的两个引擎就好了。

我们正试图了解这里可能发生的事情。我想我的主要问题是:

  1. 有什么可以解释为什么12个连接成功,2个连接失败?据我们所知,引擎之间完全没有区别。查询本身非常简单。

  2. 为什么在重新启动服务之前,这两个引擎的连接会继续失败?这告诉我,只有在重新启动服务时才会清除某些进程级别的失败状态。我查看了代码,看它是否重用了连接。它使用Entity Framework来读取单个表行,并且每次都创建一个新的DbContext。我不明白这怎么可能出错。

  3. 我们注意到,在服务即将到来的时候,DB上有一个CheckDb操作正在进行,我们想知道这是否与问题有关。然而,客户说这种情况每晚都在运行,并且过去没有引起任何问题。并且它无法解释为什么发动机没有再次恢复。

    提前感谢您的帮助。

0 个答案:

没有答案