Announcement

Collapse
No announcement yet.

ADO + set of TExecuteOption

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • ADO + set of TExecuteOption

    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

  • #2
    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

    Comment


    • #3
      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

      Comment


      • #4
        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

        Comment


        • #5
          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

          Comment


          • #6
            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

            Comment

            Working...
            X