Announcement

Collapse
No announcement yet.

Langsamer Zugriff aus MSDE über ADO?

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

  • Langsamer Zugriff aus MSDE über ADO?

    Hallo

    ich habe eine Art Personalverwaltung entwickelt, die über ADO auf verschiedene Datenbanken zugriefen kann (u.a. Access, MSDE, MySQL, Firebird). Im Programm verwende ich den ReportBuilder, um Berichte zu erzeugen. Dabei ist mir folgendes aufgefallen:

    Zur Erstellung von Statistik-Berichten (Kreuztabellen) mit komplexen Abfragen werden je nach Datenbank extrem unterschiedliche Zeiten benötigt, hier einige Beispiele (alle Datenbanken liegen auf Server, Aufruf erfolgte vom Client aus):

    Access : 7 sec (Zugriff über MS Jet 4.0 OLE DB Provider)
    Firebird: 7 sec (Zugriff über ZStyle IBOLE Provider)
    MSDE :75 sec!(Zugriff über MS OLE DB Provider for SQL Server)
    MySQL: 80 sec (Zugriff ODBC-Treiber und MS OLE DB Provider for ODBC Drivers)
    Firebird: 90 sec (Zugriff ODBC-Treiber und MS OLE DB Provider for ODBC Drivers)

    Die langen Zeiten bei den ODBC-Treibern kann ich ja noch irgendwie verstehen, was mich aber wundert, ist der fast ebenso langsame Zugriff auf MSDE über ADO. Hat jemand hierfür eine Erklärung?

    Sicherlich könnte man jetzt einwenden, dass die Abfragen für jede Datenbank optimiert werden müssten. An diese komme ich aber gar nicht ran, da sie vom ReportBuilder zur Laufzeit generiert werden (im übrigen können die Benutzer die Berichte selbst erstellen, d.h. es ist garnicht absehbar, welche Abfragen vorkommen). Wenn man sich aber mal die Unterschiede bei einer Firebird-Datenbank ansieht (7 sec beim ZStyle IBOLE Provider, 90 sec beim ODBC-Treiber und MS OLE DB Provider for ODBC Drivers) scheint die eigentliche Ursache der ODBC-Zugriff zu sein. Da die MSDE (mit OLE DB-Zugiff) aber mit 75 sec in der gleichen Größenordnung liegt wie die ODBC-Zugriffe, könnte man auf den Verdacht kommen, dass der MS OLE DB Provider for SQL Server in Wirklichkeit ein "verkappter" ODBC-Treiber ist. Ein weiterer Test mit der MSDE, aber Zugriff über ODBC-Treiber und MS OLE DB Provider for ODBC Drivers brachte nämlich fast identische Zeiten wie beim Zugriff über MS OLE DB Provider for SQL Server.

    Was mich auch überrascht hat, war die gute Leitsung von Access.

    Ich verwendet übrigens Delphi 7.1 und ADO-Version 2.8.

  • #2
    Hallo,<p>
    Mir fallen drei Sachen ein. Einmal könnte die MSDE durch eine Firewall ausgebremst werden, wenn Du über Netzwerkzugriff gehst. Dann könntest Du in Ado den falschen Modus verwenden, im Falle der MSDE sollte das clUseClient, im Falle von Access sollte es clUseServer sein. Dann könntest Du evtl. die Anzahl der gleichzeitigen Verbindungen, aber der die MSDE ausbremst, überschritten haben.<p>
    Mari
    Schöne Grüße, Mario

    Comment


    • #3
      Danke für die Hinweise, habe ich aber alles schon berücksichtigt:

      -Auf dem Server ist keine Firewall installiert

      -Bei Zugriff auf Access wird clUseServer, sonst clUseClient gesetzt. Außerdem: Wenn dieser Parameter falsch gesetzt wäre, müsste dann nicht auch bei der Firebird-Datenbank der Zugriff ähnlich langsam sein?

      -In meinen Tests war ich der einzige User, derauf die MSDE zugegriffen ha

      Comment


      • #4
        Mario,
        <br>
        sicher mit dem clUseServer bei Access ?
        Ich habe es genau umgekehrt in Erinnerung (war mal ein Thread vom A.Kosch).<p>
        clUseServer heißt doch, alle Abfragen auf dem Server machen lassen und nur das Ergebnis zurück, bei clUseClients eroflgt die Abarbeitzung auf dem Client, es müssen damit mehr Daten übers Netz geholt werden.<p>
        Das Access eh eine Client-Datenbank ist, bedeutet clUseServer das doppelte Arbeit geleistet wird gearbeitet wird, einmal der Server (also die lokale Jet Engine), dann der Client, also das eigene Programm.
        <p>
        Bei der MSDE solltest du mal den FireHouse (=) Cursor probieren (hat nichts mit Firewall zu tun).
        <p>
        Heik

        Comment


        • #5
          Der ODBC-Zugriff bremst die DB-Geschwindigkeit gegenüber einen native-Zugriff nur unmerklich aus, da hier nur DLL-Schnittstellen beteiligt sind die sehr schnell durchlaufen werden. Wenn Du über MS OLE DB Provider for SQL Server gehst ist definitiv kein ODBC beteiligt.

          Da wir aber deine Verbindungseinstellung und deinen Code nicht kennen (verwendest Du überall eine Connection/Database-Objekt oder baut jede Query-Komponente eine eigene Verbindung auf?) müssen wir raten. Selbst habe ich auch ein System im einsatz welche mit verschiedenen DBMS-Systemen läuft und der Zugriff auf SQL-Datenbank über (ein schnelles) Netz ist nicht viel langsamer als der Lokale Zugriff.

          Kannst Du mit einem Profiler-Tool (http://www.automatedqa.com/products/aqtime/index.asp) einmal einen Ablauf profilen um zu testen wo das Zeitproblem liegt. Sonst kontrollier mal ob evtl. die Datenbank schon für das SQL-Statement sehr lange braucht (evtl. hilft das Anlegen von neuen Indexes)

          Comment


          • #6
            Danke für die Hinweise,

            für die Reports wird nur eine TADOConnection verwendet, auf die alle Queries verweisen. Die Parameter für die Queries sind wie folgt:

            CursorType: ctOpenForwardOnly
            LockType: ltReadOnly
            CursorLocation: clUseClient (bei Access: clUseServer)

            Ich werde wohl den Tipp mit dem Profiling-Tool aufgreifen müssen

            Comment


            • #7
              Server bei Access ist schon richtig, da die Daten so beim Treiber bleiben. Das ist bei Access darum richtig, weil es ja auf der gleichen Maschine läuft.... Client bei MSDE, weil die Daten dann beim Öffnen der Verbindung abgeholt werden.<p>
              Du nutzt nicht AdoTable, sondern AdoDataset?<p>
              Mari
              Schöne Grüße, Mario

              Comment


              • #8
                Hallo Mario

                ich nutze ADODataset und ADOQuery (soll zwar nicht ganz so gut sein, konnte bisher aber keine Nachteile erkennen). Wenn es aber wirklich an ADOQuery liegen sollte, müsste dann nicht auch unter Firebird die Performance ähnlich schlecht sein

                Comment


                • #9
                  Normalerweise sollte AdoTable nicht so gravierend wirken, in der Vergangenheit war AdoTable bei uns aber immer für eine Überraschung gut.<p>
                  Mal eine andere Frage: Die MSDE liegt auf dem Server und wird auch dort bearbeitet. Wie ist denn in dieser Zeit die Auslastung vom Server bzw. die Netzwerklast. Access sollte ja mehr oder weniger stark den Client belasten. Sofern der Testserver schwach ausgestattet ist im Vergleich zum Client....<p>
                  Mari
                  Schöne Grüße, Mario

                  Comment


                  • #10
                    Hallo Marion,
                    Gute Idee, ich werde mal eine lokale Installation der MSDE machen, wenn es dann eklatante Unterschiede gibt, muss es wohl am Server liegen

                    Comment


                    • #11
                      Sorry, meine natürlich Mari

                      Comment


                      • #12
                        Eine lokale Installation der MSDE hat keine Verbesserung gebracht. Werde jetzt mal versuchen, die Queries zu optimieren (trotzdem wundert mich immer noch, dass unter ansonsten gleichen Bedingungen Access und Firebird so viel schneller sind als MSDE)

                        Comment

                        Working...
                        X