PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ADO + set of TExecuteOption


Helmut Schumacher
07.04.2001, 12:40
Hallo <br>
kann man mit den Einstellungen im "set of TExecuteOption" einer ADODateSet die Geschwindigkeit positiv beeiflussen? Und wenn ja, wie ist die schnellste Einstellung? <br>
Helmut

Andreas Kosch
09.04.2001, 09:47
Hallo,

wenn mit "Geschwindigkeit" die Reaktionszeit der Anwendung (Zeit bis zum Anzeigen der ersten Datensätze) gemeint ist, kann über ExecuteOptions (eoAsyncFetchNonBlocking) die Geschwindigkeit verbessert werden.

Generell sind jedoch andere Konfigurationen wichtiger, wobei die verwendete Datenbank festlegt, was und wie eingestellt werden sollte. Im Fall des SQL Server 7/2000 gibt es zum Beispiel den sogenannten <b>Firehouse</b>-Cursor, der den schnellsten und effektivsten Zugriffsweg bereitstellt. In der Dokumentation der Datenbank ist auch vermerkt, welche ADO-Einstellungen verwendet werden müssen, um diesen SQL Server-Cursortyp zu aktivieren

Helmut Schumacher
09.04.2001, 20:14
Hi,<br>
in meinem Fall ist es eine Oracle-DB. Die Tabelle hat über sechsmillionen Zeilen. Da brauche ich unbedingt eine serverseitigen
Cursor. Sonst platz mein Computer -:). Welche Einstellungen sind empfehlenswert?
<br>
Helmu

Andreas Kosch
10.04.2001, 08:11
Hallo,

die Frage ist, benötigt der Client wirklich <b>alle</b> Datensätze dieser Tabelle <b>auf einmal</b>? Wenn ein serverseitiger Cursor verwendet wird, sollte dieser die Einstellungen <b>CursorType ctOpenForwardOnly</b> und <b>LockType ltReadOnly</b> verwenden. Alles andere wird für ORACLE zum Problem (riesige Ergebnismenge auf dem SQL-Server aufbauen, S-Locks (Shared Locks) auf alle eingelesenen Datensätze halten usw.).

In jedem Fall ist es effektiver, folgendes zu machen: <br>
a) Client-seitiger Cursor <br>
b) Über eine WHERE-Einschränkung nur die Datensatzanzahl anzufordern, die tatsächlich für diesen Arbeitsschritt benötigt wird <br>
c) Zeitaufwendige/Datensatzaufwendige Arbeiten in eine Stored Procedure der Datenbank auslagern<br>
Bei clUseClient wird der SQL-Server (ORACLE) entlastet, da weder die Ergebnismenge noch die S-Locks über einen längeren Zeitraum aktiv gehalten werden müsse

Helmut Schumacher
10.04.2001, 09:54
Hallo, <br>
ja es werden alle Daten gebrauch. Die Daten werden von Oracle in einer StorProc als Ref-Cursor bereitgestellt. Allso eine WHERE-Einschränkung könnte in diesem Fall nicht gesetzt werden oder? An sonsten habe ich die von ihnen vorgeschlagenen Einstellungen eingestellt. Im nächsten Versuch werde ich ADO-Express "raus entwickeln", da hoffe ich noch auf eine kleine Verbesserung.<br>
Helmu

Andreas Kosch
11.04.2001, 11:09
Hallo,

wenn der Stored Procedure ein Parameter mit auf dem Weg gegeben wird, könnte dieser als WHERE-Einschränkung die Anzahl der Datensätze in der Ergebnismenge einschränken. Der Cursor ist ja nur ein "Zeiger" auf diese Ergebnismenge, damit der Client die Position in der Ergebnismenge ändern kann. Die Daten selbst werden dann für jeden Datensatz bei Bedarf einzeln abgefordert, wenn der Zugriff über ein schnelles Netzwerk erfolgt (LAN), hat das aber keine gravierenden Nachteile