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?
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"