Tedious: ESOCKET-Verbindungsfehler von der node js-Web-App zur MSSql-Datenbankverbindung

Erstellt am 25. Sept. 2018  ·  19Kommentare  ·  Quelle: tediousjs/tedious

Hallo Team,
Derzeit treten häufig zeitweilige Verbindungsprobleme von unserer Web-App zu MsSql auf, wenn mehr Datenverkehr für den Dienst vorhanden ist.
Gibt es abschließende Empfehlungen zu diesem Thema?

Fehler :
_{ ConnectionError: Verbindung zu < konnte nicht hergestellt werden>:1433 - Verbindung konnte nicht hergestellt werden (Sequenz)
bei Connection.tedious.once.err (D:\home\site\wwwroot\node_modules\mssql\lib\tedious.js:216:17)
bei Connection.g (events.js:291:16)
bei emitOne (events.js:96:13)
bei Connection.emit (events.js:188:7)
bei Connection.socketError (D:\home\site\wwwroot\node_modules\tedious\lib\connection.js:699:14)
unter D:\home\site\wwwroot\node_modules\tedious\lib\connection.js:590:25
bei SequentialConnectionStrategy.connect (D:\home\site\wwwroot\node_modules\tedious\lib\connector.js:153:9)
bei Socket.onError (D:\home\site\wwwroot\node_modules\tedious\lib\connector.js:169:16)
bei emitOne (events.js:96:13)
bei Socket.emit (events.js:188:7)
Code: 'ESOCKET',
Originalfehler:_

Versionsdetails:
"mühsam": "2.0.1",
"mssql": "^4.0.4",

Danke,
Praveen.

Hilfreichster Kommentar

denselben Fehler erhalten, wenn Code verwendet wird, der aus dem offiziellen Microsoft-Beispiel kopiert wurde: https://www.microsoft.com/en-us/sql-server/developer-get-started/node/windows/step/2.html

Schließlich habe ich diesen Fehler behoben, indem ich das TCP/IP-Protokoll in „Sql Server Configuration Manager“ -> „SQL Server Network Configuration“ -> „Protocols for“ aktiviert habe"->"TCP/IP"

C:\Users\zpc\Desktop\SqlServerSample>node connect.js { ConnectionError: Failed to connect to localhost:1433 - Could not connect (sequence) at ConnectionError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\errors.js:13:12) at Connection.socketError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connection.js:1183:28) at Connector.execute (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connection.js:1022:21) at SequentialConnectionStrategy.connect (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connector.js:69:7) at Socket.onError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connector.js:84:12) at Socket.emit (events.js:189:13) at emitErrorNT (internal/streams/destroy.js:82:8) at emitErrorAndCloseNT (internal/streams/destroy.js:50:3) at process._tickCallback (internal/process/next_tick.js:63:19) message: 'Failed to connect to localhost:1433 - Could not connect (sequence)', code: 'ESOCKET' }

Alle 19 Kommentare

Hey @Praveen335 👋🏻

Es tut mir leid zu hören, dass dieses Problem bei der Verwendung tedious . Leider reichen die von Ihnen bereitgestellten Informationen nicht aus, um zu verstehen, was passiert. Können Sie weitere Informationen geben? Beispielsweise wäre es hilfreich für uns zu wissen:

  • welche version von tedious verwendest du genau?
  • wann tritt dieser fehler genau auf? Aus dem Stacktrace sieht es so aus, als würde dies beim Herstellen einer Verbindung zur Datenbank passieren, aber können andere Prozesse gleichzeitig eine Verbindung herstellen? Ich denke, dies könnte ein SQLServer-Problem sein (möglicherweise aufgrund der von Ihnen erwähnten hohen Last) und kein Problem mit tedious selbst.

Danke! 🙇🏻‍♂️

Hallo @arthurschreiber ,
Danke für die schnelle Antwort. Ich habe die mühsame Version in meinem Beitrag bereits aktualisiert.

Versionsdetails:
"mühsam": "2.0.1",
"mssql": "^4.0.4",

Wir haben uns den aktiven Arbeitsthread zum SQL-Server und die Netzwerkkonnektivität angesehen, indem wir ihn an den Microsoft-Support weitergeleitet haben. Sie erwähnten alles Gute vom SQLServer-Ende. Der Arbeitsfadenanteil ist ebenfalls geringer. Ich habe versucht, es mit benutzerdefinierter Logik erneut zu versuchen. Aber kein Glück. Nach Erhalt eines Socket-Fehlers wird kontinuierlich für alle nachfolgenden Anforderungen ausgelöst. Jeder Vorschlag oder jede Empfehlung würde uns wirklich helfen. Derzeit verwenden wir den Verbindungspool, um eine Verbindung zur Datenbank herzustellen.

Danke,
Praveen.

Auch hier, es kommt plötzlich in diesen Zustand und bleibt stecken ...

Wir sehen auch die gleichen Verbindungsfehler, die auf unserem System auftreten.

Wir verbinden einen ConnectionPool beim Dienststart.
new App.SQL.ConnectionPool

Zu einem zufälligen Zeitpunkt schlägt eine Anfrage fehl mit:

Verbindungsfehler: Verbindung zum Datenbankserver fehlgeschlagen: 1433 - Verbindung nicht möglich (Sequenz)

Der Dienst wird automatisch neu gestartet, gibt diese Fehler jedoch etwa 20 Minuten lang aus. Danach wird der Dienst neu gestartet und es kann wieder eine Verbindung hergestellt werden.

Wir sehen dies bei mehreren Knotenprozessen auf diesem Server, aber sie gehen nicht gleichzeitig aus (manchmal tun sie das), was irgendwie seltsam ist. Wir glauben, dass die Ursache in der NodeJS-App und nicht in der mssql-DB liegt.

Wir verwenden diese Versionen:

mssql: 4.3.0 (neueste)
langweilige Version in diesem Paket enthalten ist 2.7.1.

Hallo. Wir haben dieses Problem auch.

Das sind unsere Versionen:
mssql: 4.3.0
die langweilige Version verwendet: 2.7.1

ConnectionError: Failed to connect to xxxxxx.database.windows.net:1433 in 15000ms
at Connection.tedious.once.err (...node_modules\mssql\lib\tedious.js:239:17)
at Object.onceWrapper (events.js:315:30)
at emitOne (events.js:116:13)
at Connection.emit (events.js:211:7)
at Connection.connectTimeout (...node_modules\mssql\node_modules\tedious\lib\connection.js:944:12)
at Timeout._onTimeout (...node_modules\mssql\node_modules\tedious\lib\connection.js:913:16)
at ontimeout (timers.js:482:11)
at tryOnTimeout (timers.js:317:5)
at Timer.listOnTimeout (timers.js:277:5)

Schreiben Sie Ihre Versionen von MSSQL Server. Jetzt wird SQLNCLI11 durch MSOLEDBSQL für die MSSQL2017-Instanz ersetzt.
https://blogs.msdn.microsoft.com/sqlnativeclient/2018/03/30/released-microsoft-ole-db-driver-for-sql-server/

denselben Fehler erhalten, wenn Code verwendet wird, der aus dem offiziellen Microsoft-Beispiel kopiert wurde: https://www.microsoft.com/en-us/sql-server/developer-get-started/node/windows/step/2.html

Schließlich habe ich diesen Fehler behoben, indem ich das TCP/IP-Protokoll in „Sql Server Configuration Manager“ -> „SQL Server Network Configuration“ -> „Protocols for“ aktiviert habe"->"TCP/IP"

C:\Users\zpc\Desktop\SqlServerSample>node connect.js { ConnectionError: Failed to connect to localhost:1433 - Could not connect (sequence) at ConnectionError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\errors.js:13:12) at Connection.socketError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connection.js:1183:28) at Connector.execute (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connection.js:1022:21) at SequentialConnectionStrategy.connect (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connector.js:69:7) at Socket.onError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connector.js:84:12) at Socket.emit (events.js:189:13) at emitErrorNT (internal/streams/destroy.js:82:8) at emitErrorAndCloseNT (internal/streams/destroy.js:50:3) at process._tickCallback (internal/process/next_tick.js:63:19) message: 'Failed to connect to localhost:1433 - Could not connect (sequence)', code: 'ESOCKET' }

denselben Fehler erhalten, wenn Code verwendet wird, der aus dem offiziellen Microsoft-Beispiel kopiert wurde: https://www.microsoft.com/en-us/sql-server/developer-get-started/node/windows/step/2.html

Schließlich habe ich diesen Fehler behoben, indem ich das TCP/IP-Protokoll in "Sql Server Configuration Manager" -> "SQL Server Network Configuration" -> "Protocols for "->"TCP/IP" aktiviert habe.

C:\Users\zpc\Desktop\SqlServerSample>node connect.js { ConnectionError: Failed to connect to localhost:1433 - Could not connect (sequence) at ConnectionError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\errors.js:13:12) at Connection.socketError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connection.js:1183:28) at Connector.execute (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connection.js:1022:21) at SequentialConnectionStrategy.connect (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connector.js:69:7) at Socket.onError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connector.js:84:12) at Socket.emit (events.js:189:13) at emitErrorNT (internal/streams/destroy.js:82:8) at emitErrorAndCloseNT (internal/streams/destroy.js:50:3) at process._tickCallback (internal/process/next_tick.js:63:19) message: 'Failed to connect to localhost:1433 - Could not connect (sequence)', code: 'ESOCKET' }

Danke schön! Ich hatte genau dieses Problem ;)

Da dieses Problem immer noch bei fast allen unseren nodejs-Diensten auftritt, haben wir einige zusätzliche Tests durchgeführt.
Der obige Kommentar mit dem TCP/IP-Fix war bereits auf unserem SQL-Server aktiviert.

Wir haben einen neuen nodejs-Dienst erstellt, der absolut nichts tut. Es wird nicht von einem anderen Dienst aufgerufen, sondern läuft nur in PM2.
Es wird einen neuen Verbindungspool öffnen, wenn es startet und einfach dort sitzt.

Wir haben 3 Fehler in 5 Tagen erhalten, die zufällig auftreten:
„Verbindungsfehler: Verbindung zu sql.tilroy konnte nicht hergestellt werden. internal:1433 – Verbindung konnte nicht hergestellt werden (Sequenz)“.

Dies ist der Code:

`
const config = {
Benutzer: Config.sql.sqluser,
Passwort: Config.sql.sqlpasswort,
Server: Config.sql.sqlhost,
Datenbank: Config.sql.sqldatabase,
port: Config.sql.sqlport,
ConnectionTimeout: 3000,
requestTimeout: 3000,
Schwimmbad: {
maximal: 100,
min: 1, //nicht alle Verbindungen schließen.
IdleTimeoutMillis: 1000,
evictionRunIntervalMillis: 1500000
}
};

const sqlConnection = new SQL.ConnectionPool(config, function (err) {
    Log.debug("got sql connection");
    if(err){
        Log.error(err);
        process.exit(1);
    }
});

sqlConnection.on('error', err => {
    Log.error(`Connection err : ${err}`);
    process.exit(1);
});

`

Wir haben unseren SQL-Server aktualisiert, aber das hat nicht geholfen. Alle unsere Pakete aktualisiert, aber immer noch diese Fehler.
Können wir noch etwas versuchen? Wir möchten langweiliges/mssql lieber nicht wegwerfen, da wir es in ziemlich vielen Diensten verwenden.

@TimTilroy verwenden Sie mühsam, um Ihren Verbindungspool oder den mühsamen Verbindungspool zu verwalten? Wenn Sie das mühsame Projekt verwenden, können Sie vielleicht das mühsame Verbindungspool-Projekt ausprobieren und sehen, ob das hilft.

Hallo IanChokS,

Wir verwenden nicht das mühsame Verbindungspool-Paket, sondern den Standard-Verbindungspool des mssql-Pakets (seine Verwendung ist meiner Meinung nach mühsam).

Allerdings haben wir das mssql-Paket jetzt auf Version 5.1 aktualisiert und es scheint stabil zu sein, wir haben keine Verbindungsfehler mehr bei unserem Testdienst. Eine der Änderungen ist die folgende:

Pool-Bibliothek von node-pool nach tarn.js verschoben

Vielleicht hat das unser Problem behoben.

Wir haben auch die minimalen Poolverbindungen auf 0 gesetzt, weiß nicht, ob das Auswirkungen haben könnte.

@MarioPerezEsteso Wenn Sie Probleme haben, eine Verbindung zu Ihrem Server herzustellen, können Sie versuchen, sicherzustellen, dass TCP IP aktiviert ist und dass Sie die richtige Portnummer in Ihrer Konfiguration haben , um zu überprüfen, ob der Server erreichbar ist.

@regevbr , @Praveen335 Wenn Sie Verbindungspooling verwenden, können Sie versuchen, die tarn.js-Bibliothek anstelle des Knotenpools zu verwenden, wie es TimTilroy getan hat, um zu sehen, ob es Ihre Verbindungsprobleme behebt. Wenn nicht, versuchen Sie vielleicht, auf das neueste mssql (v5.1) zu aktualisieren.

Update: Wir haben die neue Version von mssql (5.1.0) auf alle unsere SQL-Dienste angewendet, die minimalen Poolverbindungen auf 0 aktualisiert und es sieht so aus, als ob die Verbindungsfehler seit unserer Bereitstellung gestoppt wurden.

Ich denke, das Problem liegt nur darin, dass Sie " / " anstelle von " \ " im Namen oder so etwas verwenden

@Praveen335 Haben Sie versucht, auf die neue Version von mssql (5.1.0) zu aktualisieren, um zu sehen, ob Ihr Problem dadurch behoben wird? Wenn nicht, können Sie dieses Problem gerne erneut öffnen.

Ich verwende Versionen:
mssql: "^6.2.0",
langweilig: "^8.3.0"

Ich habe TCP/IP im Konfigurationsmanager aktiviert. Auch alle meine SQL-Dienste laufen. dennoch erhalte ich folgenden Fehler:

C:\Nodejs\node-sql-conn\Database>node connect.js
mühsam veraltet In der nächsten Hauptversion von tedious wird das Erstellen einer neuen Connection -Instanz nicht mehr automatisch eine Verbindung zum Server herstellen. Bitte verwenden Sie die neue connect oder rufen Sie die Methode .connect für das neu erstellte Objekt Connection auf, um diese Meldung stumm zu schalten. internal\process\task_queues.js:79:11
Verbindung fehlgeschlagen

C:\Nodejs\node-sql-conn\Databaseconnect.js:26
Fehler werfen;
^
ConnectionError: Fehler beim Herstellen einer Verbindung zu localhost:undefined – Write kann nicht aufgerufen werden, nachdem ein Stream zerstört wurde
bei ConnectionError (C:\Nodejs\node-sql-conn\node_modulestedious\lib\errors.js:13:12)
bei Connection.socketError (C:\Nodejs\node-sql-conn\node_modulestedious\libconnection.js:1308:56)
bei Steckdose.(C:\Nodejs\node-sql-conn\node_modulestedious\libconnection.js:1143:14)
bei Socket.emit (events.js:327:22)
bei errorOrDestroy (internal/streams/destroy.js:108:12)
bei onwriteError (_stream_writable.js:418:5)
bei onwrite (_stream_writable.js:445:5)
bei doWrite (_stream_writable.js:399:11)
bei writeOrBuffer (_stream_writable.js:387:5)
bei Socket.Writable.write (_stream_writable.js:318:11) {
Code: 'ESOCKET'
}

Das ist mein Code:
var Connection = require('mühsam').Connection;
var config = {
server: 'localhost',
Authentifizierung: {
Typ: 'Standard',
Optionen: {
Benutzername: 'sa',
Passwort: '####',
Hafen: 1433
}
},
Optionen: {
Datenbank: 'Firma',
Instanzname: 'MSSQLSERVER',
rowCollectionOnDone: true,
useColumnNames: false,
trustServerCertificate: false
}
};
var connection = new Connection(config);
connection.on('connect',function(err){
wenn (fehler) {
console.log('Verbindung fehlgeschlagen');
Fehler werfen;
}
anders{
console.log('Verbunden');
}
});
module.exports = Verbindung;

denselben Fehler erhalten, wenn Code verwendet wird, der aus dem offiziellen Microsoft-Beispiel kopiert wurde: https://www.microsoft.com/en-us/sql-server/developer-get-started/node/windows/step/2.html

Schließlich habe ich diesen Fehler behoben, indem ich das TCP/IP-Protokoll in "Sql Server Configuration Manager" -> "SQL Server Network Configuration" -> "Protocols for "->"TCP/IP" aktiviert habe.
SQLServerConfigurationManager

C:\Users\zpc\Desktop\SqlServerSample>node connect.js { ConnectionError: Failed to connect to localhost:1433 - Could not connect (sequence) at ConnectionError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\errors.js:13:12) at Connection.socketError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connection.js:1183:28) at Connector.execute (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connection.js:1022:21) at SequentialConnectionStrategy.connect (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connector.js:69:7) at Socket.onError (C:\Users\zpc\Desktop\SqlServerSample\node_modules\tedious\lib\connector.js:84:12) at Socket.emit (events.js:189:13) at emitErrorNT (internal/streams/destroy.js:82:8) at emitErrorAndCloseNT (internal/streams/destroy.js:50:3) at process._tickCallback (internal/process/next_tick.js:63:19) message: 'Failed to connect to localhost:1433 - Could not connect (sequence)', code: 'ESOCKET' }

Dieser funktioniert für mich. Danke, dass du mir die Lösung gegeben hast.

Ich experimentiere auch mit diesen ESOCKET-Verbindungsfehlern, und das Problem hängt nicht mit TCP/IP zusammen, da die App von AWS EC2 mit AS RDS verbunden ist und die meiste Zeit funktioniert.

ENDLICH habe ich den Fehler behoben. Das Skript, das ich jedes Mal verwendet habe, wenn ich eine neue Verbindung angefordert habe:

function getConnection () {
    // console.log("config")
    // console.log(config)
    return new Promise(function (resolve, reject) {
        const pool = new sql.ConnectionPool(getConfig())
        // console.log("Getting connection...");
        pool.connect()
        .then((cn) => {
            // console.log("connection got");
            resolve(cn);
        })
        .catch((e) => {
            // console.log("connection not got");
            reject(e);
        });
    })
}

Das Skript, das das Problem gelöst hat:

function runCommand(cmdText) {
    return new Promise((resolve, reject) => {
        pool2Connect
        .then((pool) => {
            // pool.request() // or: new sql.Request(pool2)
            // .input('input_parameter', sql.Int, 10)
            // .output('output_parameter', sql.VarChar(50))
            // .execute('procedure_name', (err, result) => {
            //     // ... error checks
            //     console.dir(result)
            // })
            pool.request() // or: new sql.Request(pool2)
            .query(cmdText)
            .then((rows) => {
                return resolve(rows.recordset);
            })
            .catch((e) => {
                return reject(e);
            });
        })
        .catch((err) => {
            return reject(err);
        });
    });
}

wo pool2Connect initial definiert werden muss, wenn das Skript gestartet wird:

    pool2 = new sql.ConnectionPool(config);
    pool2Connect = pool2.connect();
    pool2.on('error', err => {
        console.log(err);
    });

Ich hoffe es hilft

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen