MySQL 5.1.73-1 Connections killen

xrax

Erfahrenes Mitglied
Hallo zusammen,

ich habe in der Entwicklungsfase immer wieder mal das Problem das mein JAVA-Code viele Connections zu MySQL generiert. Die bleiben dann je nach Einstelllung in der DB bestehen. Ich möchte aber nicht warte bis die DB die connections selber killt, sondern diese "manuell" schliessen.

Im PHP_Admin finden ich nur die Möglichkeit jede einzeln zu killen. Das ist aber echt Arbeit.
Gibts nicht irgend nen Befehl wie ich alle die älter als x Sekunden und Sleep sind rausschmeissen kann ?

Dank,
xrax
 
Hi,

Mit Hilfe von Stored Procedures und Cursor ist das mit ein paar Zeilen Code erledigt:
SQL:
DELIMITER $$
CREATE PROCEDURE `KillJavaProcs`()
BEGIN
	DECLARE done INT DEFAULT 0;
	DECLARE killed INT DEFAULT 0;
	DECLARE procId INT;

	DECLARE curs CURSOR FOR
		SELECT ID FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND = 'Sleep' AND TIME > 120;
	DECLARE CONTINUE HANDLER FOR NOT FOUND
		SET done = 1;

	OPEN curs;
	read_loop: LOOP
			FETCH curs INTO procId;

			IF done THEN
					LEAVE read_loop;
			END IF;

			SET killed = killed + 1;
			KILL CONNECTION procId;
	END LOOP;
	CLOSE curs;
	
	SELECT killed;
END$$
DELIMITER ;

Aufrufen dann via SQL:
SQL:
CALL KillJavaProcs;

Die WHERE Bedingung im Select aus der ProcessList musst du halt noch so anpassen, dass er wirklich nur deine Java-Prozesse trifft und nicht alles (ganz böse wäre es z.b. die Replication Daemons abzuschiesen).

Ob das ganze aber mit Mysql 5.1 kompatibel ist kann ich leider nicht sagen. Eventuell musst du da den Code noch etwas anpassen, habe hier nur MySql 5.5+ zur Verfügung.

Grüsse,
BK
 

Neue Beiträge

Zurück