我们有一台运行某些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个实例上发生。
我们尝试了什么:
应用启动时的连接:
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)
{
});
错误由“出错时”处理程序捕获。
该错误在服务之间随机发生。一些错误实例比其他错误实例更多。 我们的选择已用完。知道是否可以看到更详细的错误吗?
答案 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/UsingConfig_Install.html