Query über SSH langsam

Athropos

Grünschnabel
Liebe Community!
Ich habe ein Problem, welches mich seit einigen Tagen in den Wahnsinn treibt.

Konkret möchte ich Daten von einem entfernten mySQL-Server abholen.
Dazu muß ich (geht nicht anders) eine SSH-Verbindung zu ebendiesem aufbauen und darüber den mySQL-Port tunneln.

An sich kein Problem, sollte man meinen (hatte ich auch gehofft).
ABER, sobald die Query etwas größer wird (immer noch verschwindend klein, <2000 Zeilen im Table, 3 Felder Typ "TEXT", 1 Index) dauert es ewig (sprich läuft fast immer in einen Timeout) bis die Ergebnisse da sind :(

Ein anderer, gleich aufgebauter Table mit nur 90 Zeilen liefert das Ergebnis in max 5s zurück.

Wenn ich den Tunnel mit puTTY aufbaue, ist die Query auch kein Problem (dauer ca. 30s).

Woran kann es liegen?

Code:
import java.util.Vector;
import java.sql.*;

public class ZTestExt  {
	
	private com.trilead.ssh2.Connection connSSH = null;
	private com.trilead.ssh2.LocalPortForwarder lpf1SSH = null;
	private String hostnameSSH = "";
	private String usernameSSH = "";
	private String keyfilePassSSH = "";
	
	private java.sql.Connection connEXT = null; 	

	public ZTestExt() {		
		long timerStartSSH = System.currentTimeMillis();

		connSSH = new com.trilead.ssh2.Connection(hostnameSSH);
		try {
			connSSH.connect();
			connSSH.authenticateWithPassword(usernameSSH, keyfilePassSSH);			
			lpf1SSH = connSSH.createLocalPortForwarder(33066, "127.0.0.1", 3306);
			
			try {
				long timerStartEXT = System.currentTimeMillis();
				String getExtQuery = "SELECT * FROM table";
				Class.forName("com.mysql.jdbc.Driver");
				connEXT = DriverManager.getConnection("dbURL", "dbUser", "dbPass");				
    			Statement stateEXT = connEXT.createStatement();
    			ResultSet resEXT = stateEXT.executeQuery(getExtQuery);
    			while (resEXT.next()) {
    				//write results to vector
			}
    			resEXT.close();
    			stateEXT.close();
    			connEXT.close();
    			long timerEndEXT = System.currentTimeMillis();    	
		    	long timerDiffEXT = timerEndEXT - timerStartEXT;
		    	timerDiffEXT = timerDiffEXT / 1000;    	
			} catch (Exception qex) {
				qex.printStackTrace();			
			}			
			lpf1SSH.close();
			connSSH.close();
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	long timerEndSSH = System.currentTimeMillis();    	
    	long timerDiffSSH = timerEndSSH - timerStartSSH;
    	timerDiffSSH = timerDiffSSH / 1000;    	
} //end ZTestExt "function"
 
Ist die Abfrage an sich langsam? Miss mal die Zeit vor und hinter executeQuery und lass dir diese ausgeben.
 
Servus!

Sorry, war krankheitsbedingt seither nicht mehr am Computer.

Ich hab, wie angeregt, die Zeit vor und nach dem executeQuery gemessen und hatte nach 3 Versuchen 1x 507s, 1x 488s, 1x timeout. (die while-Schleife, in der die Ergebnisse dann verarbeitet werden dauert nicht mal 1s)

Evtl. interessant: Query liefert 1011 Zeilen, lt. phpMyAdmin hat der Table 337,8KB

lg

[EDIT]
Ich starte das Ganze aus Eclipse heraus, allerdings hatte ich es testhalber auch schon in ein *.jar-File exportiert mit demselben Ergebnis
[/EDIT]
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück