Announcement

Collapse
No announcement yet.

Wichtige Frage zur FireBird DB!!!

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

  • Wichtige Frage zur FireBird DB!!!

    Hallo!

    Bin zwar neu hier, aber ich hab eine vllt schwere bzw unmögliche Frage:

    Gibt es irgendeine Möglichkeit oder ein Tool mit dem man sehen kann das der Firebird-Dienst gerade macht? Also welche Statements abgesetzt werden usw...

    Hintergrund ist der, das auf unserem Datenbankserver die fbserver.exe auf 100% läuft aber wir nicht wissen was da dran schuld ist! Und jetzt wäre ein Tool oder eine Möglichkeit hilfreich zu sehn was der Dienst grade macht!

    mfg
    infernalshade

  • #2
    Gibt es irgendeine Möglichkeit oder ein Tool mit dem man sehen kann das der Firebird-Dienst gerade macht? Also welche Statements abgesetzt werden usw...
    Es gibt verschiedene SQL-Monitore

    Comment


    • #3
      Hallo,

      ein aussagekräftiges Ergebnis, was sich gerade in einer Datenbank tut, bekommst du erst so wirklich mit den Monitoring-Tabellen in Firebird 2.1.

      - Was kommt denn bei gstat -h heraus, wenn der Prozess auf 100% läuft?
      - Welche Firebird-Version verwendest Du?


      lg,
      Thomas
      Thomas Steinmaurer

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

      Comment


      • #4
        Wo kann ich denn bei FireBird nachschaun welche Version es ist?

        Bin in der Hinsicht ein Voll-Noob :-) Wurde nur beauftragt mich um das Problem zu kümmern, kenn mich aber nicht sonderlich aus!

        mfg
        infernalshade

        Comment


        • #5
          Hallo,

          mit isql (im bin Unterverzeichnis) zur Datenbank verbinden und dann das folgende Statement eingeben:

          Code:
          show database;

          lg,
          Thomas
          Thomas Steinmaurer

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

          Comment


          • #6
            Also die FireBird Version ist 1.5

            Hab es jetzt endlich geschafft mich mit dem isql mit der datenbank zu verbinden :-)

            Was soll ich denn jetzt machen?

            mfg
            infernalshade

            Comment


            • #7
              Hallo,

              isql wieder beenden. Die Firebird Version wissen wir jetzt ja. ;-)

              Jetzt führe mal gstat -h aus. Z.b:

              Code:
              gstat -h -u sysdba -p masterkey c:\mydb.fdb
              Poste dann den Output. Generell ist zu sagen, dass es mit Firebird 1.5 ud 2.0 nicht möglich ist, abzufragen, was der Firebird Server gerade tut. Das wird erst mit 2.1 möglich sein. D.h. der gstat Output könnte z.B. darauf hindeuten, dass du ein Problem mit dem Transaktionsmanagement in der Client-Anwendung hast, allerdings muss man dann den Client-Code kennen um zu analysieren, wo vielleicht die Probleme liegen können.

              Ehrlich gesagt würde ich mich an deiner Stelle vorher doch etwas in die Firebird-Materie einlesen, weil sonst artet dieser Thread in einen Workshop aus (nicht bös gemeint!). ;-) Gegen anderen Meinungen gibt es durchaus eine Dokumentation, die frei verfügbar ist. z.B.:

              http://www.firebirdsql.org/index.php?op=doc
              http://www.destructor.de/firebird/index.htm

              Das Non-Plus-Ultra ist natürlich das Buch von Helen Borrie:

              http://www.ibphoenix.com/main.nfs?a=..._firebird_book

              Vielleicht würdest Du auch schneller ans Ziel kommen (je nachdem wie dringend es ist), wenn dir jemand auf Consulting-Basis gezielt unter die Arme greift. Bei Interesse schick mir einfach eine Email (ts AT iblogmanager.com)

              lg,
              Thomas
              Thomas Steinmaurer

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

              Comment


              • #8
                Kurz das Szenario:

                Wir haben ein Programm zur Verwaltung von unseren Externen Mitarbeitern...bzw mehrere Programme...Wir arbeiten in einer Terminal-Serverumgebung.

                So und jetzt macht mal der eine Lohnübergabe und der andere eine andere Abfrage. Zum Teil fressen diese Abfragen ziemlich viel Performance...

                Und eben jetzt wäre es praktisch zu sehn was der fbserver dienst gerade macht...damit wir sehen ob vllt grad eine Lohnübergabe läuft oder keine Ahnung!

                Ausgabe ist folgende der gstat -h:

                Database header page information:
                Flags 0
                Checksum 12345
                Generation 3990684
                Page size 1024
                ODS version 10.1
                Oldest transaction 112
                Oldest active 3949982
                Oldest snapshot 3949883
                Next transaction 3990679
                Bumped transaction 1
                Sequence number 0
                Next attachment ID 0
                Implementation ID 16
                Shadow count 0
                Page buffers 0
                Next header page 0
                Database dialect 1
                Creation date Feb 28, 2008 14:39:30
                Attributes database shutdown

                Variable header data:
                Sweep interval: 20000
                *END*

                Comment


                • #9
                  Hallo,

                  dieser Output bringt interessante Dinge zum Vorschein, die dir nicht gefallen werden:

                  - Page Size: Sollte mindestens 4096, kann auch 8192 sein. Kann beim Restore mit gbak geändert werden

                  - Oldest Transaction / Oldest Active: Die Differenz ist wirklich unglaublich! Kein Wunder, dass der Firebird Server so beschäftigt ist. Jeder Start einer Transaktion wird für den Server mühsamer und mühsamer. Vermutlich läuft auch gerade ein Sweep, da das Sweep-Intervall auf 20000 eingestellt ist. Will heißen, automatisches Sweep wenn (Oldest Active - Oldest Transaction > 20000). Die Ursache für diese riesige Differenz kann eine langlaufende Transaktion sein, die niemals beendet wurde. Oder die Oldest Transaction bleibt auch hinten, wenn eine Transaktion mit vielen Änderungen mit ROLLBACK zurückgesetzt wurde. Ein weiterer Grund könnte eine abgebrochene Two-Phase Commit Transaktion sein. Ich gehe mal davon aus, dass man sich in der Client-Anwendung nicht wirklich um Transaktionen gekümmert hat (z.B. Verwendung von AutoCommit, keine Hard Commits sonder nur Soft Commits, usw ...)

                  - Page Buffers: Würd ich unter FB 1.5 z.B. auf 10000 setzen, sofern der SuperServer verwendet wird. Das ergibt bei einer Page Size von 8192 ca. 80MB Hauptspeicher fürs Caching für die eine Datenbank

                  - Attributes: "Forced Writes" fehlt, somit ist Forced Writes OFF, d.h. vor allem unter Windows hattest Du bis jetzt Glück, dass die DB-Datei nicht beschädigt wurde. Forced Writes solltest Du auf ON setzen. Dies kann mit gfix erfolgen. Ein weiteres Attribut das derzeit gesetzt ist, ist "database shutdown", d.h. befindet sich im heruntergefahrenen Modus (Exklusiv-Modus?). Somit kann mit dieser Datenbank eigentlich nur SYSDBA oder der DB-Owner damit arbeiten. Ist das so gewünscht? Die DB kann wiederum mit gfix in den "Online" Modus zurückgebracht werden.

                  So, das war eine unentgeltliche Schnellanalyse. ;-)

                  Welche Zugriffskomponenten werden in der Client-Anwendung eigentlich verwendet?

                  lg,
                  Thomas
                  Thomas Steinmaurer

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

                  Comment


                  • #10
                    Oha...Schaut schlimm aus oder?

                    Also keine Ahnung wie unsere Programme auf die Datenbank zugreifen, jedoch weis ich das es gewollt ist, das nur der SYSDBA auf der Datenbank was macht...Sprich es gibt kein Berechtigungsprinzip, sondern die Programme arbeiten alle als "Admin" auf der Datenbank!

                    Die Datenbank ist aber nicht nur bei Abfragen, sondern allgemein ziemlich langsam, kann das eben auf die von dir gefundenen Probleme zurückgeführt werden?

                    Wie gesagt kenn ich mich mit FireBird nicht sonderlich aus, deswegen hab ich jetzt Angst, das ich was kaputt mache falls ich da an der Datenbank was umstelle!

                    Es wäre aber möglich einen Test-Datenbank-Server aufzusetzen wo ich testen kann...Gibt es denn einen Befehl oder eine Möglichkeit alle die von dir erwähnten ptimierten Einstellungen auf einmal zu setzen? oder muss ich da jede Einstellung einzeln umstellen? Wenn ja, wie?

                    mfg
                    infernalshade

                    Comment


                    • #11
                      Originally posted by infernalshade View Post
                      Die Datenbank ist aber nicht nur bei Abfragen, sondern allgemein ziemlich langsam, kann das eben auf die von dir gefundenen Probleme zurückgeführt werden?
                      Ja.

                      Originally posted by infernalshade View Post
                      Wie gesagt kenn ich mich mit FireBird nicht sonderlich aus, deswegen hab ich jetzt Angst, das ich was kaputt mache falls ich da an der Datenbank was umstelle!
                      Na dann würd ich die Finger davon lassen. Sorry, aber für Troubleshooting muss man eine gewissen Erfahrung mit einem Produkt mitbringen und wenn es nur mal darum geht, die Grundkenntnisse zu haben. Bitte nimm das nicht persönlich. ;-)

                      Originally posted by infernalshade View Post
                      Es wäre aber möglich einen Test-Datenbank-Server aufzusetzen wo ich testen kann...Gibt es denn einen Befehl oder eine Möglichkeit alle die von dir erwähnten ptimierten Einstellungen auf einmal zu setzen?
                      Nein.

                      Originally posted by infernalshade View Post
                      oder muss ich da jede Einstellung einzeln umstellen?
                      Ja.

                      Originally posted by infernalshade View Post
                      Wenn ja, wie?
                      Hab ich dir schon versucht zu skizzieren. ;-) Nochmal:

                      - Ändern der Page-Size => Backup/Restore mit gbak, wobei beim Restore eine andere Page-Size angegeben wird (siehe: http://www.destructor.de/firebird/gbak.htm)
                      - Buffers setzen => Mit gfix
                      - Database Online => Mit gfix
                      - Setzen von FORCED WRITES ON => Mit gfix

                      D.h., eigentlich könntest du drei Sachen mit gfix mit einem Aufruf machen. Zu gfix findest du etwas hier: http://www.destructor.de/firebird/gfix.htm ;-)


                      lg,
                      Thomas
                      Thomas Steinmaurer

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

                      Comment


                      • #12
                        Gut dann installier ich mir mal einen Test-Datenbank-Server und les mich in die Syntax ein.
                        Probiere dann mal deine genannten Einstellungen und hoffe das es was bringt!

                        Auf jeden Fall vielen vielen Dank für die schnelle und vor allem sehr hilfreiche Antwort!

                        mfg
                        infernalshade

                        Comment


                        • #13
                          An deiner Stelle würde ich mal ein Backup der Datenbank (gbak) machen und auf eine abweichende Datenbank restoren. Dadurch wird die Datenbank von Altlasten befreit. Ein Test des Programmes auf der sauberen Datenbank sollte dann zeigen, ob das Performance-Problem dadurch behoben ist.
                          Im 2. Schritt würde ich mal beobachten, wie sich die Anzahl der aktiven Transaktionen entwickelt.

                          Comment


                          • #14
                            Also wenn wir bisher Problem mit der Datenbank hatten haben wir ein Validation drüber laufen lassen...Hat das den gleichen Effekt, oder ändert das Validation an sich nichts?

                            mfg
                            infernalshade

                            Comment


                            • #15
                              Nein, weil ja offene Transaktion für sich nicht bedeuten dass die Datenbank fehlerhaft ist.

                              Comment

                              Working...
                              X