winniwinter
Mitglied
Hallo, ich habe mir ein programm geschrieben, das auf 2 DB2 server connecten soll, eine Abfrage startet und dabei gleichzeitig die Zeit mist, bis die Abfrage zu ende ist.
Habe das in eine Schleife gepackt um einen Durchschnittswert zu ermitteln. Der Zugriff und das Messen der Zeit klappen bisher ganz gut. Jedoch ist das Problem, das der 1. Durchlauf immer länger dauert als der 2. Auch wenn ich 2mal den selben Server teste! Und das leuchtet mir einfach nicht ein. Hier einmal das Programm:
//Klasse Zeit
Hiermit kann ich die Zeit stoppen
Also nochmal kurz zusammengefasst. var1 braucht immer länger als var2. Selbst wenn var1 und var2 auf den selben server zugreifen. Und ich weiss einfach nicht warum.
Ziel ist es einfach später in Erfahrung zu bringen um wieviel es schneller ist, Daten auf einem extra Server leseoptimiert bereitzustellen.
Wäre sehr über eure Hilfe glücklich
Habe das in eine Schleife gepackt um einen Durchschnittswert zu ermitteln. Der Zugriff und das Messen der Zeit klappen bisher ganz gut. Jedoch ist das Problem, das der 1. Durchlauf immer länger dauert als der 2. Auch wenn ich 2mal den selben Server teste! Und das leuchtet mir einfach nicht ein. Hier einmal das Programm:
//Klasse Zeit
Hiermit kann ich die Zeit stoppen
Code:
public class Zeit
{
double starttime;
double endtime;
double elapsed;
public void start()
{
starttime = System.currentTimeMillis();
}
public void end()
{
endtime = System.currentTimeMillis();
}
public double summe()
{
elapsed = endtime - starttime;
return elapsed;
}
}
Code:
//Klasse Vars
Hier ist der Datenbankzugriff und die Treiber gespeichert
Java:
import java.sql.*;
import java.io.*;
public class Vars
{
Statement smt = null;
ResultSet rst = null;
Connection con = null;
String driver = null;
String sql1 = "SELECT * FROM DB2INST.KUNDEN";
String url = null;
String pwd = null;
String usr = null;
public Vars(String pDrvr, String purl)
{
driver = pDrvr;
url = purl;
try
{
Class.forName(driver).newInstance();
con = DriverManager.getConnection(url);
}
catch(Exception ex)
{
System.out.println(ex);
}
}
public void zugriff()
{
try
{
smt = con.createStatement();
rst = smt.executeQuery(sql1);
}
catch(SQLException ex)
{
System.err.println("SQLException information");
while(ex!=null) {
System.err.println ("Error msg: " + ex.getMessage());
System.err.println ("SQLSTATE: " + ex.getSQLState());
System.err.println ("Error code: " + ex.getErrorCode());
ex.printStackTrace();
ex = ex.getNextException();
}
}
}
}
Code:
//Main Klasse
Java:
public class main
{
static int loop = 100;
public static void main(String[] args)
{
Zeit z1 = new Zeit();
Vars var1 = new Vars("com.ibm.db2.jcc.DB2Driver", "jdbc:db2://host:port/MYDB:user=user;password=passwort;");
Vars var2 = new Vars("com.ibm.db2.jcc.DB2Driver", "jdbc:db2://host:port/MYDB:user=user;password=passwort;");
z1.start();
for(int i=0;i<= loop;i++)
{
var1.zugriff();
}
z1.end();
double durchschnitt =z1.summe() / loop;
System.out.println("1. Server: " +durchschnitt+ " ms");
z1.start();
for(int i=0;i<= loop;i++)
{
var1.zugriff();
}
z1.end();
durchschnitt =z1.summe() / loop;
System.out.println("2. Server: " +durchschnitt+ " ms");
}
}
Also nochmal kurz zusammengefasst. var1 braucht immer länger als var2. Selbst wenn var1 und var2 auf den selben server zugreifen. Und ich weiss einfach nicht warum.
Ziel ist es einfach später in Erfahrung zu bringen um wieviel es schneller ist, Daten auf einem extra Server leseoptimiert bereitzustellen.
Wäre sehr über eure Hilfe glücklich