next up previous contents
Next: Portierung auf andere Up: ODBC mit verschiedenen Previous: ODBC mit verschiedenen

Access / Oracle

Die folgenden Tests wurden auf einem 100 MHz Pentium mit Windows for Workgroups 3.11, 16 MB Hauptspeicher, PCI-Bus, Adaptec SCSI-Kontroller und 1 MB SCSI-Festplatte, 20 MB permanenter Auslagerungsdatei, 512 kB Cache (Windows-Systemsteuerung, 386 erweitert, Virtueller Speicher) und 2048 SmartDrive-Cache durchgeführt.

Nach dem Laden von Windows und Oberon waren noch verfügbar:
21771 kB Speicher
72% System-Ressourcen

Nach dem Starten der Oracle-Datenbank waren nur mehr verfügbar:
10028 kB Speicher
70% System-Ressourcen

In den folgenden Tests wurden die Datenbanktreiber MS Access 2.0 (des ODBC SDKs) und Personal Oracle 7 miteinander verglichen. Die Verbindungszeichenketten zu den beiden Datenbanktreibern waren:
"DSN=Access_sdk20;DBQ=C:\ODBCSDK\SMPLDATA\ACCESS\SAMPLE.MDB;
FIL=RedISAM;" und
"DSN=TestDB;DBQ=2:;UID=SCOTT;PWD=TIGER".

Test 1: Verbinden mit Datenbank, viermal hintereinander die Testtabellen löschen und neu anlegen, Verbindung schließen und Garbage-Collector aufrufen. Da das Schließen der Verbindung implizit über den Mechanismus der Finalisierung (siehe Kapitel gif) passiert, ist es notwendig, einen Garbage-Collector-Durchlauf zu erzwingen. Die Zeit dafür beträgt allerdings nur Sekundenbruchteile und verfälscht das Ergebnis nicht.

 nn¯ 
Batch.Start

System.Time

ODBCBench.Connect

ODBCBench.DropTables

ODBCBench.CreateTables

ODBCBench.DropTables

ODBCBench.CreateTables

ODBCBench.DropTables

ODBCBench.CreateTables

ODBCBench.DropTables

ODBCBench.CreateTables

ODBCBench.Disconnect

System.Collect

System.Time

~

Test 2: Verbinden mit Datenbank, in TestTabelle 1 100 Datensätze einfügen, Verbindung schließen und Garbage-Collector aufrufen.

 nn¯ 
Batch.Start

System.Time

ODBCBench.Connect

ODBCBench.InsertIntoBench1

ODBCBench.Disconnect

System.Collect

System.Time

~

Test 3: Verbinden mit Datenbank, an TestTabelle 1 100 Datensätze anhängen, Verbindung schließen und Garbage-Collector aufrufen.

 nn¯ 
Batch.Start

System.Time

ODBCBench.Connect

ODBCBench.AppendToBench1

ODBCBench.Disconnect

System.Collect

System.Time

~

Test 4: Verbinden mit Datenbank, in TestTabelle 2 100 Datensätze einfügen, Verbindung schließen und Garbage-Collector aufrufen.

 nn¯ 
Batch.Start

System.Time

ODBCBench.Connect

ODBCBench.InsertIntoBench2

ODBCBench.Disconnect

System.Collect

System.Time

~

Test 5: Verbinden mit Datenbank, viermal "`SELECT Bench1.val FROM Bench1, Bench2 WHERE (Bench1.i = Bench2.i) AND (Bench1.firstname LIKE ?)"' mit Zeichenkettenparameter (Wert: "`%14%"') ausführen, Verbindung schließen und Garbage-Collector aufrufen (Testtabelle 1 enthält 200 Datensätze, Testtabelle 2 enthält 100 Datensätze)

 nn¯ 
Batch.Start

System.Time

ODBCBench.Connect

ODBCBench.ExecuteStringParam "`SELECT Bench1.val FROM Bench1, Bench2

WHERE (Bench1.i = Bench2.i) AND (Bench1.firstname LIKE ?)"' "`%14%"'

ODBCBench.ExecuteStringParam "`SELECT Bench1.val FROM Bench1, Bench2

WHERE (Bench1.i = Bench2.i) AND (Bench1.firstname LIKE ?)"' "`%14%"'

ODBCBench.ExecuteStringParam "`SELECT Bench1.val FROM Bench1, Bench2

WHERE (Bench1.i = Bench2.i) AND (Bench1.firstname LIKE ?)"' "`%14%"'

ODBCBench.ExecuteStringParam "`SELECT Bench1.val FROM Bench1, Bench2

WHERE (Bench1.i = Bench2.i) AND (Bench1.firstname LIKE ?)"' "`%14%"'

ODBCBench.Disconnect

System.Collect

System.Time

~

Test 6: Verbinden mit Datenbank, an TestTabelle 1 2000 Datensätze anhängen, Verbindung schließen und Garbage-Collector aufrufen.

 nn¯ 
Batch.Start

System.Time

ODBCBench.Connect

ODBCBench.InsertIntoBench1

ODBCBench.AppendToBench1

ODBCBench.AppendToBench1

ODBCBench.AppendToBench1

ODBCBench.AppendToBench1

ODBCBench.AppendToBench1

ODBCBench.AppendToBench1

ODBCBench.AppendToBench1

ODBCBench.AppendToBench1

ODBCBench.AppendToBench1

ODBCBench.AppendToBench1

ODBCBench.AppendToBench1

ODBCBench.AppendToBench1

ODBCBench.AppendToBench1

ODBCBench.AppendToBench1

ODBCBench.AppendToBench1

ODBCBench.AppendToBench1

ODBCBench.AppendToBench1

ODBCBench.AppendToBench1

ODBCBench.AppendToBench1

ODBCBench.Disconnect

System.Collect

System.Time

~

Test 7: Verbinden mit Datenbank, viermal "`SELECT Bench1.val FROM Bench1, Bench2 WHERE (Bench1.i = Bench2.i) AND (Bench1.firstname LIKE ?)"' mit Zeichenkettenparameter (Wert: "`%1%"') ausführen, Verbindung schließen und Garbage-Collector aufrufen (Testtabelle 1 enthält 2000 Datensätze, Testtabelle 2 enthält 100 Datensätze)

 nn¯ 
Batch.Start

System.Time

ODBCBench.Connect

ODBCBench.ExecuteStringParam "`SELECT Bench1.val FROM Bench1, Bench2

WHERE (Bench1.i = Bench2.i) AND (Bench1.firstname LIKE ?)"' "`%1%"'

ODBCBench.ExecuteStringParam "`SELECT Bench1.val FROM Bench1, Bench2

WHERE (Bench1.i = Bench2.i) AND (Bench1.firstname LIKE ?)"' "`%1%"'

ODBCBench.ExecuteStringParam "`SELECT Bench1.val FROM Bench1, Bench2

WHERE (Bench1.i = Bench2.i) AND (Bench1.firstname LIKE ?)"' "`%1%"'

ODBCBench.ExecuteStringParam "`SELECT Bench1.val FROM Bench1, Bench2

WHERE (Bench1.i = Bench2.i) AND (Bench1.firstname LIKE ?)"' "`%1%"'

ODBCBench.Disconnect

System.Collect

System.Time

~

Test 8: Verbinden mit Datenbank, in TestTabelle 3 11 lange Datensätze einfügen und wieder auslesen (mit Verifikation), Verbindung schließen und Garbage-Collector aufrufen.

 nn¯ 
Batch.Start

System.Time

ODBCBench.Connect

ODBCBench.InsertLongData

ODBCBench.GetLongData

ODBCBench.Disconnect

System.Collect

System.Time

~

Test 9: Verbinden mit Datenbank, "`SELECT count(*) FROM Bench1, Bench1 Again"' (2000 Datensätze in Bench1),

 nn¯ 
Batch.Start

System.Time

ODBCBench.Connect

ODBCBench.Execute "`SELECT count(*) FROM Bench1, Bench1 Again"'

ODBCBench.Disconnect

System.Collect

System.Time

~

Test 10: Verbinden mit Datenbank, Indizes erstellen, dann wie Test7

 nn¯ 
Batch.Start

System.Time

ODBCBench.Connect

ODBCBench.Execute "`CREATE INDEX idx1 ON Bench1 (i)"'

ODBCBench.Execute "`CREATE INDEX idx2 ON Bench2 (i)"'

ODBCBench.ExecuteStringParam "`SELECT Bench1.val FROM Bench1, Bench2 WHERE

(Bench1.i = Bench2.i) AND (Bench1.firstname LIKE ?)"' "`%1%"'

ODBCBench.ExecuteStringParam "`SELECT Bench1.val FROM Bench1, Bench2 WHERE

(Bench1.i = Bench2.i) AND (Bench1.firstname LIKE ?)"' "`%1%"'

ODBCBench.ExecuteStringParam "`SELECT Bench1.val FROM Bench1, Bench2 WHERE

(Bench1.i = Bench2.i) AND (Bench1.firstname LIKE ?)"' "`%1%"'

ODBCBench.ExecuteStringParam "`SELECT Bench1.val FROM Bench1, Bench2 WHERE

(Bench1.i = Bench2.i) AND (Bench1.firstname LIKE ?)"' "`%1%"'

ODBCBench.Disconnect

System.Collect

System.Time

~

Die in der folgenden Tabelle abgedruckten Ergebnisse sind die in Sekunden gemessenen Zeiten. Es fällt auf, daß der Datenbanktreiber von MS Access in den meisten Fällen ganz gut abschneidet, daß aber der Oracle-Datenbanktreiber bei Abfragen schneller Ergebnisse liefert (auch schon ohne Indizes).

 
Table: Gemessene Zeiten (in Sekunden) für die einzelnen Tests



next up previous contents
Next: Portierung auf andere Up: ODBC mit verschiedenen Previous: ODBC mit verschiedenen



Christoph Steindl
Thu Jul 24 14:37:19 MET DST 1997