Announcement

Collapse
No announcement yet.

Zuviele offene Verbindungen ?

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

  • Zuviele offene Verbindungen ?

    Hallo,

    ich schreibe momentan ein kleines Programm, dass Daten zwischen 2 verscheidenen Datenbanken austauscht. Mein Ansatz dazu war, für jeden Vorgang (z.B. Übernahme von Kundenstammdaten) eine eigene Methode zu schreiben, die sich ihre Querys erstellt (die Querys greifen auf eine gemeinsame MySQL Datenbankverbindung zu) und nach der Operation die Querys wieder freigibt.

    Beim einfügen größerer Datensatzmengen bekomme ich nach einiger Zeit die Fehlermeldung, dass der DBX Username oder Passwort nicht akzeptiert wird. Meiner Ansicht nach ist dies darauf zurückzuführen, dass zuviele offene Verbindungen existieren und der MySQL Server dichtmacht.

    Ist mein Ansatz, die Querys dynamisch zu erstellen, ungeeignet ? Wird mit jeder neuen Query automatisch eine neue Verbindung aufgebaut ? <br>
    Ich verwende die DBExpress Komponenten. Bin für jede Hilfe dankbar.<br>
    <br>gruß,<br>René

  • #2
    Hallo,

    nur beim Zugriff über ADO bzw. OLE DB kann die eigene Anwendung darauf vertrauen, dass sich im Hintergrund der automatische Datenbankverbindungs-Pool des Betriebssystems um alles kümmert. Mit ADO/OLE DB kann die eigene Anwendung beliebig oft eine Verbindung aufbauen oder trennen, ohne dass dies negative Auswirkungen (Performance oder Verbindungsanzahl) hat.

    Mit dbExpress steht dieser Komfort jedoch nicht zur Verfügung. Dort muss sich der Entwickler selbst um Alles kümmern

    Comment


    • #3
      Ich kenn zwar nicht die Qualität der DB-Express-Komponenten, aber selbst verwenden wir
      <a href="http://www.microolap.com/products/dac/mysqldac.htm">DAC für MySQL</a> ohne Probleme.

      Auch werden größere Text/Excel-Dokumente per TmySQLQuery's in die Datenbank ohne Probleme importiert. Und kommen in der neuesten Version 2.0 komplett ohne zusätzliche DLL aus (einfachste Installation

      Comment


      • #4
        Hallo Herr Kosch,

        zuerst einmal vielen Dank für Ihre Antwort !! Um was genau muss sich der Entwickler alles selbst kümmern ? Was muss ich ändern, um das Problem abzustellen ? Wird mit jeder Query automatisch eine neue Verbindung aufgebaut ?<br><br>
        Gruß,<br>
        Ren&#233

        Comment


        • #5
          Hallo !

          Hier ein kurze Schilderung des Quellcodes an der Stelle wo es hakt (ich beschreibe nur schematisch, da es zuviel Code ist):<br><br>

          Zuerst wird eine Query geöffnet, deren Ergebnisse in einer Schleife (ca. 27000 Durchläufe) verarbeitet werden. Innerhalb der Schleife wird eine Funktion aufgerufen, die ebenfalls eine Query öffnet und in einer weiteren Schleife deren Ergebnisse auswertet. In dieser Schleife werden wiederum mehrere Funktionen aufgerufen. Nach Durchlauf werden die geöffneten Querys wieder geschlossen.<br><br>

          Jede aufgerufene Funktion erstellt sich eigene Querys und gibt vor Beendigung die Ressourcen wieder frei, es sind also zu keiner zeit mehr als 10 Querys offen. Jede Funktion führt mehrere Datenbankoperationen durch.

          Wo könnten hier die Probleme liegen, warum entstehen zuviele offene Verbindungen bzw. warum nimmt der MySQL Server plötzlich keine Verbindung mehr an ?

          @Herrn Kosch: könnten Sie mir bitte kurz erläutern, was Sie genau damit meinten, dass der Entwickler sich um alles selbst kümmern muss ? Haben Sie vielleicht einen Link zu Beispiel- oder Referenzcode, das würde mir schon genügen.<br><br>
          gruß,<br>
          René Ot

          Comment


          • #6
            Hallo,

            aufgrund der Einschränkungen verwende ich dbExpress in keinem echten Projekt. Meines Wissens nach gibt es auch weltweit kein Buch, in dem dbExpress ausführlicher dargestellt wird - die trivialen Demo-Programm verursachen niemals derartige Problem :-)

            Die universellen dbExpress-Komponenten setzen auf die speziellen dbExpress-Datenbanktreiber auf, wobei der Treiber das Verhalten festlegt. Da ich MySQL nicht einsetze, kann ich auch dazu nichts sagen.

            Es bleiben also nur noch die generellen Hinweise a la TSQLConnection-Eigenschaft <b>KeepConnection</b> übrig

            Comment


            • #7
              Hallo Herr Kosch,

              vielen Dank für Ihre Antwort ! KeepConnection habe ich auch schon getestet, jedoch ohne Erfolg. Meinen Sie, dass ein neuer dbExpress Treiber (z.B. von Core Labs, http://crlab.com/dbx/ ) für MySQL abhilfe schaffen könnte ? <br><br>

              gruß,
              René Ot

              Comment


              • #8
                Hallo,

                wie gesagt kenne ich MySQL nur vom Namen her - einen Versuch ist es Wert

                Comment


                • #9
                  Hallo,
                  <br>
                  Ich wollte nur ein kurzes Feedback zu der Lösung dbExpress-Treiber von crlab geben:

                  Alle Probleme sind verschwunden und auch von der Performance her eine deutliche Steigerung.

                  Bei Variants nimmt der Treiber eine etwas strengere Typüberprüfung vor was aber nicht wirklich stört.

                  Fazit: zu empfehlen !<br>

                  gruß,
                  René Ot

                  Comment

                  Working...
                  X