我们的软件客户端部署显示间歇性SQL服务器连接失败,我们正在努力理解它们。
我们的系统包括一个SQL Server DB(2012)和14个相同的引擎,每个引擎都安装在Windows 2012 VM上。其中每个都是从同一个模板创建的,因此它们应该是相同的。引擎由Windows服务组成,该服务通过从表中读取单行来在启动时连接到数据库。如果连接失败,他们将等待几秒钟再试一次,直到他们得到连接。
在这种特殊情况下,由于Windows Update,VM全部重新启动。 (SQL服务器在大约12小时之前进行了更新/重新启动)。他们在几分钟之内上网了。 12台发动机启动没有任何问题。但是,其中两个无法通过以下方式连接到DB:
“底层提供商在Open上失败了。”
然后这两个引擎开始进行轮询,并继续发出此错误数小时。其余的发动机已经启动并且很好。我们也有一个代理服务,整个访问数据库并没有显示任何连接问题。
当客户端注意到这个问题时,他们重新启动了两个问题虚拟机上的引擎服务,连接到数据库的两个引擎就好了。
我们正试图了解这里可能发生的事情。我想我的主要问题是:
有什么可以解释为什么12个连接成功,2个连接失败?据我们所知,引擎之间完全没有区别。查询本身非常简单。
为什么在重新启动服务之前,这两个引擎的连接会继续失败?这告诉我,只有在重新启动服务时才会清除某些进程级别的失败状态。我查看了代码,看它是否重用了连接。它使用Entity Framework来读取单个表行,并且每次都创建一个新的DbContext。我不明白这怎么可能出错。
我们注意到,在服务即将到来的时候,DB上有一个CheckDb操作正在进行,我们想知道这是否与问题有关。然而,客户说这种情况每晚都在运行,并且过去没有引起任何问题。并且它无法解释为什么发动机没有再次恢复。
提前感谢您的帮助。