Announcement

Collapse
No announcement yet.

Arbeitsspeicherproblem bei SQL Abfragen

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

  • Arbeitsspeicherproblem bei SQL Abfragen

    Hallo zusammen,

    vielleicht kann mir ja jemand helfen:
    Ich habe eine Datenbank ca. 10GB gross.
    Pagesize: 16384
    Page Buffer: 2048, jetzt 75 probiert.
    Firebird 2.5.1 unter Windows als SuperClassic.


    Ab und zu muss ich über die Tabellen toben und eine SQL Kommando ansetzen welches die Anzahl der Datensätze und eine Summernberechnung über eine Spalte macht.

    Also: select count(PIC_SIZE), SUM(PIC_SIZE) from xx

    Insgesamt sind es in dieser Datenbank so ca. 30 Tabellen, einige davon haben über 1 Mio Datensätze.

    Die Abfragen dauern recht lange, ist ja klar, was mir mehr Probleme bereitet ist der Arbeitstspeicherverbrauch.

    Wenn er ein paar Tabellen durch hat ist der freie Arbeitsspeicher um 1.5 GB gesunken. Im ProzessExplorer kann ich erkennen, dass der Wert Cache WS estrem nach oben geht. Bei den einzelnen Prozessen kann man keinen Speicheranstieg erkennen.

    Es sieht so aus, als wenn der Datenbankcache immer grösser wird.
    Kann ich das irgendwo begrenzen?

    Für Tipps wäre ich sehr dankbar...

  • #2
    Noch was, was ich vergessen hatte:

    Das größte Problem daran ist, dass der Speicher nicht wieder freigegeben wird! Nur das Programmende gibt wieder alles frei. Zur Laufzeit aber nicht mehr.

    Comment


    • #3
      Hallo zusammen,

      hat keinen einen Tipp für mich?
      Habe eben gemekrt, dass es auch passiert wenn man mit ALTER INDEX ... ACTIVE die Indeces aller Tabellen neu aufbaut.

      Kann ich den Speicherbedarf irgendwie begrenzen? Brauche dringend Infos dazu.

      Comment


      • #4
        * Auf welchem Betriebssystem läuft der SC Server?
        * Wieviele Datenbanken sind unter der Obhut des SC Prozesses?
        * Wieviele Connections je Datenbank?
        * Bei welchem Prozess steigt laut Task Manager der Speicherverbrauch?
        * Hast du TempCacheLimit in firebird.conf verändert?
        Thomas Steinmaurer

        Firebird Foundation Committee Member
        Upscene Productions - Database Tools for Developers
        Mein Blog

        Comment


        • #5
          Originally posted by Thomas Steinmaurer View Post
          * Auf welchem Betriebssystem läuft der SC Server?
          * Wieviele Datenbanken sind unter der Obhut des SC Prozesses?
          * Wieviele Connections je Datenbank?
          * Bei welchem Prozess steigt laut Task Manager der Speicherverbrauch?
          * Hast du TempCacheLimit in firebird.conf verändert?
          1. Festgestellt bisher unter Windows 7 und Windows 7 Embedded.
          2. Nur eine Datenbank.
          3. Unterschiedlich, zwischen 20-100.
          4. kann man leider nicht sehen. Es muss aber mein Prozess Firebird API sein, denn wenn ich diesen beende dann wird auch der Cache Speicher wieder freigegeben. Ich finde aber leider keine einzige Möglichkeit, der Speicher auch beim Pozess anzuzeigen.
          5. Nein den habe ich nicht verändert, den kannte ich auch noch nicht, ist das nich tnur für die Festplatte?

          Comment


          • #6
            Hmm, ich denke, du hast nicht wirklich einen Plan was Page Buffers (in Kombination mit Page Size) etc. bedeutet bzw. welche Auswirkungen das hat? Ich skizziere mal den Worst-Case:

            Bei 100 Connections hast du hier eine RAM-Usage fürs Caching von max. 3,2 GB und dann kommt noch max. 800 MB dazu, wenn das TempCacheLimit mit dem Standardwert von 8 MB je Connection voll ausgenützt wird.

            Generell darum auch meine Frage, ob der SC Prozess, deine Client-Anwendung bzw. das OS File System Caching den RAM verwendet.

            * Wieviel RAM hast den drinnen?
            * Bist du interessiert an einem ca. 4-8h Firebird Crashkurs, der allerdings nicht kostenlos ist, um dir die Basics zu vermitteln?

            lg,
            Thomas
            Thomas Steinmaurer

            Firebird Foundation Committee Member
            Upscene Productions - Database Tools for Developers
            Mein Blog

            Comment


            • #7
              Originally posted by Thomas Steinmaurer View Post
              Hmm, ich denke, du hast nicht wirklich einen Plan was Page Buffers (in Kombination mit Page Size) etc. bedeutet bzw. welche Auswirkungen das hat? Ich skizziere mal den Worst-Case:

              Bei 100 Connections hast du hier eine RAM-Usage fürs Caching von max. 3,2 GB und dann kommt noch max. 800 MB dazu, wenn das TempCacheLimit mit dem Standardwert von 8 MB je Connection voll ausgenützt wird.

              Generell darum auch meine Frage, ob der SC Prozess, deine Client-Anwendung bzw. das OS File System Caching den RAM verwendet.

              * Wieviel RAM hast den drinnen?
              * Bist du interessiert an einem ca. 4-8h Firebird Crashkurs, der allerdings nicht kostenlos ist, um dir die Basics zu vermitteln?

              lg,
              Thomas
              Hey, doch das mit dem PageBuffer ist mir schon klar.
              Maschinen mit den grossen Datenbanken haben meist auch 16 GB Arbeitstspeicher drin. ich habe testweise die gleiche Datenbank reduziert auf 4000'er Pagesize und Pagebuffers bei 75 gelassen. Es verändert sich nicht.

              Der Speicherverbrauch steigt immer weiter. Ich kann das nur erkennen an dem Wert Cache WS in der Gesamtübersicht im Process Explorer. Wo genau der Speicher verwendet wird weiß ich leider nicht.
              Das mit dem TempCacheLimit wußte ich wirklich nicht ist mir neu.

              Also ein wenig kenne ich mich damit schon aus. War auch schon in Oldenburg beim Holger Klemmt vor ein paar Jahren, habe damals dort viel mitgenommen und geändert.

              Comment


              • #8
                Wo genau der Speicher verwendet wird weiß ich leider nicht.
                Wennst schon im Process Explorer drinnen bist, dann schau doch einfach mal auf Prozessebene, ob es Verdächtige gibt.
                Thomas Steinmaurer

                Firebird Foundation Committee Member
                Upscene Productions - Database Tools for Developers
                Mein Blog

                Comment


                • #9
                  Originally posted by Thomas Steinmaurer View Post
                  Wennst schon im Process Explorer drinnen bist, dann schau doch einfach mal auf Prozessebene, ob es Verdächtige gibt.
                  Das ist es ja, da ist keiner zu erkennen, egal welche Speicherspalten ich alle aktiviere.

                  Das Problem habe ich ja auch, wenn ich es mit IBExpert simulieren statt mit meinem Prozess. Der Speicher steigt an und wird ncicht freigegeben. Beende ich IBExpert ist der Speicher wieder verfügbar.

                  Comment


                  • #10
                    Weil beim Beenden von IBExpert die Connecction zur DB geschlossen wird und hier der Page Cache freigegeben wird, zumindest unter Classic und SuperClassic.

                    Du kannst auch mal "RamMap.exe" im Sysinternals Package anwerfen, um eine genauere Analyse der RAM-Usage zu erhalten.
                    Thomas Steinmaurer

                    Firebird Foundation Committee Member
                    Upscene Productions - Database Tools for Developers
                    Mein Blog

                    Comment


                    • #11
                      Anscheind wird er aber erst freigegeben, wenn alle Verbindungen beendet sind. Den ich beende die Verbindung die zu dem Speicheranstieg führt am Ende der Routine, erst beim Programmende wo alle noch offenen Verbindungen auch geschlossen werden wird der Speicher freigegeben.

                      RamMap schaue ich mir an, habe ich leider nicht und im Moment kann man es nicht aus dem netz laden, scheint ne Störung zu sein.

                      Comment


                      • #12
                        Dann wird es sich vermutlich um den File System Cache handeln.
                        Thomas Steinmaurer

                        Firebird Foundation Committee Member
                        Upscene Productions - Database Tools for Developers
                        Mein Blog

                        Comment


                        • #13
                          Hm, ich glaube ich habe doch einen Fehler bei mir gefunden!!! Grosses Sorry!
                          Ich lade den Wert für Page Buffers aus einer Inidatei damit ich diesen beim Programmstart expliziet setzen kann. Aus irgendeinem Grund war die Grössenüberprüfung falsch und Werte unter 2048 habe ich auf 2048 korrigiert. So ein Mist, kein Wunder, dass der Speicherverbrauch dann weiter so hoch ist.

                          Jetzt muss ich das nur noch mal mit IBExpert gegenprüfen. Da ist eigentlich immer 75 eingestellt und trotzdem hatte ich einen sehr großen Verbrauch.
                          Muss ich aber erst noch einmal untersuchenbevor ich da nun was falsches sage!

                          Comment


                          • #14
                            Der Hinweis mit den zusätzlichen 8MB pro Verbindung für den TempCache muss ich aber auf jeden Fall in Zukunft mit berücksichtigen. Macht bei 100 Verbindungen ja schon was aus :-)
                            Danke für den Tip.

                            Comment


                            • #15
                              Hm, ich glaub der nimmt aber trotzdem mehr.

                              Mein test läuft jetzt wieder seit ein paar Minuten.
                              Page Size=16386 , Page Buffers =75.
                              Verbindungen derzeit 68.
                              Bin aber jetzt schon wieder bei 1.5 GB Arbeitsspeicher. Das kann doch nicht oder?

                              Comment

                              Working...
                              X