【问题标题】:Random connection errors to MS SQL from nodeJS app从 nodeJS 应用程序到 MS SQL 的随机连接错误
【发布时间】:2024-01-08 06:49:01
【问题描述】:

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

我们正在运行:

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

数据库服务器: 视窗服务器 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)
{
});

错误被“on error”处理程序捕获。

错误在服务中随机发生。有些人比其他人有更多的错误实例。 我们的选择已经不多了。知道我们是否可以看到更详细的错误吗?

【问题讨论】:

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


    【解决方案1】:

    我有几个建议。

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

    (在查询过程中连接中断显然不好,但是可以通过重试解决的随机故障连接是恕我直言的最佳问题。)

    忽略潜在的代码内修复,我想知道您何时说“将服务器复制到新机器” - 您是使用最新的 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

    【讨论】:

    • 我们克隆了 linux 服务器,而不是 DB 服务器,因为在我们当前的生产系统设置中很难做到这一点。但是我会看看我们是否可以升级那个服务器,谢谢你的信息。至于重试:我们崩溃以确保以下请求能够正常连接(它们总是这样)。我将更新一项服务,该服务将重试连接,看看会发生什么。
    最近更新 更多