KartoffelKiffer
Mitglied
Hallo,
ich habe eine grundlegende Frage zur Arbeit mit Java und MySQL.
Ich habe eine Klasse Connect, die folgendes Grundgerüst aufzeigt:
Und eine weitere Funktion getConnection, die die Member-Variable pc zurück gibt.
Sobald ich eine Abfrage an die Datenbank stellen möchte, sieht der Ablauf folgendermaßen aus:
Wenn ich also eine Abfrage absende, erstelle ich jedesmal ein neues ResultSet, das auf (in diesem Falle) this.stmnt zurück greift.
Nun habe ich - wenn ich mehrere Abfragen in der Sekunde absende - einen Engpass, der sich folgendermaßen äußert:
Manchmal kommt auch folgendes Szenario zustande:
Jetzt frage ich mich, wie ich bei vielleicht 30-40 Abfragen (SELECT-Abfragen, alle WHEREs, GROUPs und ORDERs sind vernünftig indiziert) in der Sekunde so einen Engpass bekomme. Es handelt sich dabei um Abfragen über zwei Tabellen. Die eine zählt knapp 3.000 Einträge (wobei zwei Spalten ausgelesen werden) und eine weitere zählt knapp 5.000 Einträge, wo lediglich eine Bedingung auf eine Spalte der Tabelle besteht.
Gehe ich die Abfrage nun generell falsch an oder wo kann dort mein Engpass liegen?
Das grundlegende Problem dabei ist, dass ich nach Erhalt der Exceptions keine weiteren Abfragen mehr an die Datenbank senden kann. Erst., wenn ich den MySQL-Dienst neustarte, ist dies wieder möglich.
Ich hoffe mir kann jemand helfen, auch gerne mit etwas guter Lektüre im Internet. Ich weiß nämlich nicht mehr, was ich noch weiter machen soll/kann.
MFG KK
ich habe eine grundlegende Frage zur Arbeit mit Java und MySQL.
Ich habe eine Klasse Connect, die folgendes Grundgerüst aufzeigt:
Code:
pc = null;
MysqlConnectionPoolDataSource ds = new MysqlConnectionPoolDataSource();
try {
// Connection
ds.setUrl(ReadConfig.Element("database_connectionstring"));
ds.setUser(ReadConfig.Element("database_user"));
ds.setPassword(ReadConfig.Element("database_pass"));
// Reconnect
ds.setAutoReconnect(true);
ds.setAutoReconnectForConnectionPools(true);
ds.setAutoReconnectForPools(true);
pc = ds.getPooledConnection();
} catch (SQLException e) {
new Exception(e.toString());
}
Und eine weitere Funktion getConnection, die die Member-Variable pc zurück gibt.
Code:
try {
return pc.getConnection();
} catch (Exception e) {
connect();
try {
return pc.getConnection();
} catch (Exception ex) {
new Exception(e.toString());
return null;
}
}
Sobald ich eine Abfrage an die Datenbank stellen möchte, sieht der Ablauf folgendermaßen aus:
Code:
Connection con = Connect.getConnection();
this.stmnt = con.createStatement();
ResultSet rs = this.stmnt.executeQuery("SELECT hose FROM kleidung WHERE name='Fritz'");
while(rs.next()) {
(...)
}
Wenn ich also eine Abfrage absende, erstelle ich jedesmal ein neues ResultSet, das auf (in diesem Falle) this.stmnt zurück greift.
Nun habe ich - wenn ich mehrere Abfragen in der Sekunde absende - einen Engpass, der sich folgendermaßen äußert:
java.sql.SQLException: Unexpected exception encountered during query.
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
Last packet sent to the server was 12345ms ago.
Manchmal kommt auch folgendes Szenario zustande:
java.sql.SqlException: Logical handle no longer valid
com.mysql.jdbc.PacketTooBigException: Packet for query is too large (6644739 > 1047552). You can change this value on the server by setting the max_allowed_packet variable.
Jetzt frage ich mich, wie ich bei vielleicht 30-40 Abfragen (SELECT-Abfragen, alle WHEREs, GROUPs und ORDERs sind vernünftig indiziert) in der Sekunde so einen Engpass bekomme. Es handelt sich dabei um Abfragen über zwei Tabellen. Die eine zählt knapp 3.000 Einträge (wobei zwei Spalten ausgelesen werden) und eine weitere zählt knapp 5.000 Einträge, wo lediglich eine Bedingung auf eine Spalte der Tabelle besteht.
Gehe ich die Abfrage nun generell falsch an oder wo kann dort mein Engpass liegen?
Das grundlegende Problem dabei ist, dass ich nach Erhalt der Exceptions keine weiteren Abfragen mehr an die Datenbank senden kann. Erst., wenn ich den MySQL-Dienst neustarte, ist dies wieder möglich.
Ich hoffe mir kann jemand helfen, auch gerne mit etwas guter Lektüre im Internet. Ich weiß nämlich nicht mehr, was ich noch weiter machen soll/kann.
MFG KK