Announcement

Collapse
No announcement yet.

BDE vs JetEngine via ADO Faktor 100 langsamer

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

  • BDE vs JetEngine via ADO Faktor 100 langsamer

    Ich habe nun mal die Performance einer Access-Tabelle mit der einer
    Paradox-Tabelle verglichen, das Ergebnis war erschreckend (s.u.)!
    Es wurden jeweils 1000 Datensätze in die uns allen bekannte Tabelle
    DBDEMOS\Vendors eingefügt, verändert und wieder gelöscht. Ergebnis Jet mit
    ADO ist zwischen Faktor 100 und 30 langsamer.<p>
    Das entsprechende Demoprogramm kann unter www.bkedv.de/download/ADODBTest.zip
    geholt werden. Es vergleicht auch die verschiedenen Zugriffsmethoden von
    ADO (TADOTable, TADODataset, ADO nativ). Ich konnte den von A. Kosch oft
    herausgestellten Unterschied zwischen TADOTable und TADODataset nicht erkennen
    (absolut identische Ergebnisse). Richtig ist aber, daß der native Zugriff auf
    die ADO-Objekte ca. 25% schneller ist, ob das den Mehraufwand lohnt, muß jeder
    für sich entscheiden.<br>
    Interessant ist auch, daß ADO Faktor 4 langsamer ist, wenn man es in Delphi
    startet, dies trifft für die BDE nicht zu.
    Was es jetzt noch zu klären gilt, ist ob hier ADO bremst, oder die Jet-Engine ???<br>
    Vielleicht habe ich auch was falsch eingestellt ?! (Tipps are welcome) <br>
    Es wurden die original Imports von Delphi verwendet (AdoInt.pas), die Wahl des
    Interfaces sollte aber auf die Performance keinen Einfluß haben (oder?).

    <PRE><CODE>
    (in Delphi) (Ohne Delphi)
    BDE ADOTable ADO pur BDE ADOTable ADODataset ADO pur
    INSERT 160 16213 15011 160 3425 3425 2614
    UPDATE 110 16954 16874 110 4125 4125 3685
    DELETE 100 15142 70 (1 100 3906 3906 50 (1

    Messwerte in ms, P3/900, Delphi 6
    (1: bei delete wurde bei ADO-pur nicht Satzorientiert gelöscht, sonder via SQL-Command
    </PRE></CODE>

    happy coding, Bernd.

  • #2
    Hallo,

    getreu dem Winston Churchill zugeschriebenen Satz "<i>Vertraue nur der Statistik, die du selbst gefälschst hast</i>" gibt es bei dem o.g. Beispielprojekt <i>Project1.dpr</i> gleich 2 Probleme:

    1. Problem: <br>
    Es wird eine ACCESS-Datenbank verwendet, die keine SQL-Datenbank ist, sondern SQL nur über die JET ENGINE simulieren muss. Bei einer "richtigen" Datenbank sehen die Zahlen anders aus - siehe meine Ergebnisse (die mit einer Microsoft SQL Server 2000-Datenbank ermittelt wurden). Nicht ohne Grund betont Microsoft immer, dass eine bestehende DAO-Anwendung nicht ohne triftigen Grund auf ADO umgestellt werden soll, weil nur die DAO-Objekte speziell auf MDB-Datenbanken optimiert wurden.

    2. Problem: <br>
    Das Testprogramm verwendet <b>clUseClient</b> für einen clientseitigen Cursor und puffert alle Datensätze lokal im Arbeitsspeicher. Dies ist für SQL-Datenbanken goldrichtig - aber für ACCESS (datensatzorientierte ISAM-Datenbank) doppelt gemoppelt. Denn die lokal auf dem eigenen Rechner ausgeführte JET ENGINE verwendet einen eigenen Cache, der nun nochmals von der <i>OLE Client Cursor Engine</i> (clUseClient) doppelt abgebildet wird. Bei ACCESS sollte man auf <b>clUseServer</b> zurückgreifen - die Zeiten schrumpfen merklich zusammen.

    Meine Zeiten für AdoDataset1 (procedure TForm1.Button1Click):<br>
    a) <b>clUseClient</b>: 12108, 13360, 12278 <br>
    b) <b>clUseServer</b>: 2153, 1082, 1692<br>
    Das ist dann doch wohl schon ein beachtlicher Unterschied, oder?

    P.S: Es macht bei ACCESS auch einen Unterschied, ob mit der JET ENGINE auch das 97er oder 2000er-Format der MDB zugegriffen wird. Im konkreten Einzelfall (Aufbau der Tabellen) sind die Unterschiede messbar

    Comment


    • #3
      <b>Update:</b><p>
      Nach dem ebenso einfachen wie genialen Hinweis von A. Kosch hier die neuen Ergebnisse jeweils mit Serverseitigem Cursor (unter sonst gleichen Bedingungen)
      <PRE><CODE>
      (Ohne Delphi, Serverseitiger Cursor)
      ADOTable ADODataset ADO pur
      INSERT 1024 971 150
      UPDATE 1361 1322 251
      DELETE 1282 1142 120 (1

      Messwerte in ms, P3/900, Delphi 6
      (1: bei delete wurde bei ADO-pur nicht Satzorientiert gelöscht, sonder via SQL-Command
      </PRE></CODE>

      Hier bekommt nun Herr Kosch (wieder mal Recht:
      pures ADO ist nun wirklich um den Faktor 7 schneller, lohnt sich also wirklich.<br>
      Der Unterschied zwischen TADOTable und TADODataset bleibt weiter im Bereich der Meßungenauigkeit.<p>
      Das geänderte Programm kann wieder unter www.bkedv.de/download/ADODBTest.zip geholt werden, um die Ergebnisse selbst nach zu messen

      Comment


      • #4
        Was aber schlecht mit clUseServer ist:

        Sämtliche "Recordcount"-Properties funktionieren nicht mehr.
        Das ist leider SEHR schade.

        Grüße
        Tim

        Comment

        Working...
        X