Klaus1: Problem mit node.js und promise-mysql

Beitrag lesen

Hallo,

ich habe im Moment das Problem, dass mir irgendwann immer die verfügbaren Verbindungen zum mysql-Pool verloren gehen. D.h. das Script baut dann einfach keine mysql-Verbindungen mehr auf, oder wartet endlos darauf, dass eine wieder frei wird.

Alle meine Abfragen sind nahezu identisch aufgebaut:

		strQuery="update tabelle set wert = 1";
		pool.getConnection()
		.then(function(conn){
			connection = conn;
			var result = connection.query(strQuery);
			return result;
		}).then(function(rows){
			if (rows.changedRows == 1) {
				consolelog("update successfull");
			} else {
				consolelog('error occurred!');
			}
			connection.release();
			return;
		}).catch(function(error){
			connection.release();
			//logs out the error
			consolelog("Fehler bei: "+strQuery);
			consolelog(error);
		});	

Wie man sehen kann, gebe ich die Verbindung in jedem Fall zurück, aber trotzdem ist nach einer gewissen Laufzeit Schluss. Das Script läuft noch, es werden lediglich keine mysql-Kommandos mehr ausgeführt.

Den Pool baue ich wie folgt auf:


mysqlConnData = {
	host: "localhost",
	user: "user",
	password: "dasistganzfurchtbargeheim",
	database: "service",
	connectionLimit: 100
}

pool = mysql.createPool(mysqlConnData);

Daher meine Fragen: Wie kann ich sicherstellen, dass nicht mehr genutzte Verbindungen wirklich wieder verfügbar werden? Kann ich im Falle dessen, dass keine Verbindungen mehr verfügbar sind, wenigstens eine Fehlermeldung erzeugen oder vielleicht dann gar alle (obsoleten) Verbindungen auf einen Schlag freigeben?

Ich vermute mal, dass der Errorhandler beim getConnection nicht auslöst, weil er sich dann einfach in eine Warte-Queue einreiht?

Ich habe es auch anstelle des connection.release() mit einem

pool.releaseConnection(connection);

versucht, aber das brachte keinen Unterschied.

Würde es helfen, wenn ich in der Verbindung das QueueLimit auf z.B. 0 setzen würde? Würde dann das Errorhandling anspringen? Ich habe auch noch den Eintrag "WaitforConnections" gefunden, denn ich auf false setzen könnte oder "acquireTimeout". Würde dieser die Verbindung automatisch wieder freigeben?

LG Klaus