从nodeJS应用程序到MS SQL的随机连接错误



我们有一个运行一些nodeJS服务的AWS服务器。连接到MS sql的服务随机崩溃,并显示消息"无法连接到数据库服务器:1433-无法连接(序列)"。

我们正在运行:

应用服务器:Linux Ubuntu 14.4AWS m5NodeJS:8.11.2服务正在使用包mssql最新版本(4.3.0)。这包括乏味的2.7.1。

数据库服务器:Windows服务器2012。sql server 2012

吞吐量:大约300rpm,当吞吐量较低(大约20rpm)时也会发生错误。应用程序通过PM2在集群中运行(运行4次)。我们看到错误同时发生在所有4个实例上,但有时也发生在1或2个实例上。

我们尝试了什么:

  • 使用繁琐的3.0.1升级到mssql的alpha版本。没什么区别
  • 从亚马逊M4机器升级到M5机器,增强了网络功能
  • 正在更改应用程序中的池设置。我们尝试将最小连接数设置为0或低/高值。最大值也为低/高值,但无效
  • 将服务器复制到新计算机
  • 将idleTimeoutMillis设置为1秒
  • ping数据库服务器以查看是否存在连接问题,但当错误发生时,我们没有看到奇怪的ping

应用程序启动时的连接:

App.sqlConnection = new App.SQL.ConnectionPool(config, function(err) {
if(err){
Log.error(err);
process.exit(1);
}
App.sqlConnection.on('error', err => {
Log.error(`There was a connection err : ${err}`);
process.exit(1);
});
});

请求;

var request = new App.SQL.Request(App.sqlConnection);
request.query(sQuery, function(err,results)
{
});

错误由"on error"处理程序捕获。

该错误在服务间随机发生。有些人比其他人有更多的错误实例。我们没有选择了。如果我们能看到更详细的错误,你知道吗?

我有几个建议。

首先,你有多确信这些错误实际上是个问题?如果您的代码只是重试而不是退出,那么之后连接是否稳定,或者连接是否可以在查询过程中中断?

(在查询过程中丢弃连接显然不好,但连接上的随机故障(可以通过重试修复)是IMHO的最佳问题。)

忽略潜在的代码修复,我想知道当你说你"将服务器复制到新机器"时——你是使用最新的Windows server 2012启动了一个新的AMI,还是镜像和克隆?如果您的数据库服务器使用了几年,那么您的实例中可能实际运行了过时的网络驱动程序,可能会让您遇到一些问题。

如果您想探索这一点,可以尝试在新启动的AMI上从头开始重建整个数据库服务器。或者,您可以在现有实例上升级PV驱动程序、网络适配器和EC2Config,可以在以下链接中找到说明:

https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/Upgrading_PV_drivers.html#aws-光伏升级

https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/sriov-networking.html#enable-增强型网络

https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/UsingConfig_Install.html

最新更新