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

时间:2018-12-21 08:45:03

标签: node.js sql-server connection sequence tedious

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

我们正在运行:

应用服务器: Linux Ubuntu 14.4 AWS m5 NodeJS的:8.11.2 服务正在使用软件包mssql最新版本(4.3.0)。其中包括繁琐的2.7.1。

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

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

我们尝试了什么:

  • 使用乏味的3.0.1升级到mssql的alpha版本。没有改变
  • 通过增强的网络从Amazon 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)
{
});

错误由“出错时”处理程序捕获。

该错误在服务之间随机发生。一些错误实例比其他错误实例更多。 我们的选择已用完。知道是否可以看到更详细的错误吗?

1 个答案:

答案 0 :(得分:0)

我有几个建议。

首先,您如何确定这些错误实际上是一个问题?如果您的代码只是重试而不是退出,连接之后是否稳定,还是在查询过程中连接掉线?

(在查询中间断开连接显然不好,但是可以通过重试解决的随机连接故障 是具有IMHO的最佳问题。)

忽略潜在的代码内修复,我想知道当您说“将服务器复制到新计算机”时,是使用最新的Windows Server 2012启动了新的AMI,还是镜像并克隆了?如果您的数据库服务器已经使用了几年,则实际上您的实例中可能正在运行过时的网络驱动程序,这可能会给您带来一些麻烦。

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

https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/Upgrading_PV_drivers.html#aws-pv-upgrade

https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/sriov-networking.html#enable-enhanced-networking

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