Announcement

Collapse
No announcement yet.

Superserver unter Windows?

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

  • Superserver unter Windows?

    Hallo, <br>
    Ich habe ein Problem mit der Performance meiner Interbase-Anwendung. <br>
    Einige Daten vorab: Firebird 1.0 , 7 Datenbanken mit je 0,7 GB, 50 User. <br>Hardware Server: W2K Doppelprozessor 4 GB RAM. Client: Citrix-Terminal-Server<br>Im Laufe des Tages wird die Anwendung immer langsamer, wenn der Sweep dann einsetzt oder irgendeine Mega-Abfrage gestartet wird, pendelt sich der IBserver bei 100% CPU-Auslastung ein und kommt davon nur durch Neustart wieder runter. Die Ursache hierfür soll in der Unverträglichkeit von Firebird und Doppelprozessor liegen. <br> Abhilfe wird würde die Super - Server Architektur schaffen. In der Literatur habe ich diesen Begriff aber immer nur in Zusammenhang mit Linux gefunden. <br> Kann mir jemand helfen? Mich sozusagen aufklären ) DANKE

  • #2
    Hallo Christian,<br><br>
    ich denke Du verwechselt hier ein paar Dinge . Eine 100% CPU-Auslastung hat nicht unbedingt etwas mit dem Zusammenspiel SMP-Maschine und Firebird zu tun, weil du hier einen ganz anderen Effekt sehen würdest, nämlich dass der ibserver.exe Prozeß zwischen den beiden CPU's in einem Art Ping-Pong Effekt hin- und hergeschaltet wird. Dies trifft für die <b>SuperServer Architektur</b> zu. Das Firebird Konfigurationsfile <b>ibconfig</b> bietet allerdings einen Parameter <b>CPU_AFFINITY</b> an, der anhand von einer Bitmaske definiert, welche CPU der ibserver.exe Prozeß verwenden soll.
    <br><br>
    Wenn Du nun von Firebird mit SMP-Unterstützung sprichst, dann handelt es sich hierbei um die <b>Classic Architektur</b>, die ist allerdings unter Windows für Firebird 1.0 nicht verfügbar, sondern wird voraussichtlich mit Firebird 1.5 kommen. D.h. Du hast eigentlich unter Windows nur die Möglichkeit den ibserver.exe Prozeß an eine CPU zu "binden". Unter Linux existiert sowohl SuperServer, als auch Classic, allerdings hat Classic den Nachteil, dass die Services API nicht verfügbar ist, und somit kann man mit den meisten Entwicklungs/Admin-Tools die Datenbank bzgl. Backup/Restore, Validierung, Benutzerverwaltung, ... nicht administrieren.<br><br>
    Nun zu Deinem Problem. Eine 100% CPU-Auslastung kann auf unterschiedliche Dinge hinweisen.<br><br>
    - Die "Mega-Abfrage" hat eine große sortierte Ergebnismenge, die nicht im Hauptspeicher sortiert werden kann, sondern es muss auf die Festplatte ausgelagert werden<br>
    - Der Firebird Server ist mit einem Sweep oder dem Garbage Collecting vieler veralteter Datensatzversionen beschäftigt (das Garbage Collecting könnte z.B. auch damit angestoßen worden sein, dass deine Mega-Abfrage sehr viele Datensätze besucht hat, und als veraltete markierte Versionen vom Garbage Collection Thread beseitigt werden)<br><br>
    Ein paar Gegenfragen:<br><br>
    - Wie hoch sind die Page Buffers für jede Datenbank?<br>
    - Welche Page Size verwendest Du für die Datenbanken?<br>
    - Forced Writes ON der OFF?<br>
    - Welches Sweepintervall ist gesetzt?<br>
    - Wie sieht die DB-Statistik für OIT/OAT/Next Transaction zum Zeitpunkt der 100% CPU-Auslastung aus?<br>
    - Läuft Firebird auf einer eigenen DB-Maschine oder auf dem Terminal Server?<br>
    - Wie sieht der Connect-String zur DB aus?<br>
    - Welche Zugriffskomponenten verwendest Du für den Zugriff? IBO, FIBPlus, IBX, ...<br><br>

    Gruss,<br>
    Thoma
    Thomas Steinmaurer

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

    Comment


    • #3
      Hallo Thomas,

      danke für die schnelle Antwort:

      zu Deinen Fragen:

      a) Buffers := 2048<Br>
      B) Pagesize := 4096<br>
      C) ForceWrite := ON<br>
      D) Sweepintervall := 20000<br>
      E)Die Frage nach dem OIT/OAT/Next Transaction kann ich noch nicht beantworten<br>

      F)Der Firebird läuft auf einer eigenen DB-Maschine<br>

      G,H)
      Ich habe zwei Connects:<br>
      TDataBase - BDE<br>
      DB.DriverName := 'INTRBASE';<br>
      DB.Params.Values['BATCH COUNT'] := '200';<br>
      DB.Params.Values['BLOB SIZE'] := '32';<br>
      DB.Params.Values['BLOBS TO CHACHE'] := '64';<br>
      DB.Params.Values['COMMIT RETRAIN'] := 'FALSE';<br>
      DB.Params.Values['ENABLE BCD'] := 'FALSE';<br>
      DB.Params.Values['ENABLE SCHEMA CACHE'] := 'FALSE';<br>
      DB.Params.Values['LANGDRIVER'] := 'DBWINUS0';<br>
      DB.Params.Values['MAX ROWS'] := '-1';<br>
      DB.Params.Values['OPEN MODE'] := 'READ/WRITE';<br>
      DB.Params.Values['SCHEMA CACHE SIZE'] := '8';<br>
      DB.Params.Values['SCHEMA CACHE TIME'] := '-1';<br>
      DB.Params.Values['SERVER NAME'] := ServerPfad;<br>
      DB.Params.Values['SQLPASSTHRU MODE'] := 'SHARED AUTOCOMMIT';<br>
      DB.Params.Values['USER NAME'] := User;<br>
      DB.Params.Values['WAIT ON LOCKS'] := 'FALSE';<br>
      DB.Params.Values['PASSWORD'] := Password;<br>
      DB.Params.Values['DRIVER FLAGS'] := '4096';<br><br>
      TIBDataBase - IBX<br>

      IB.Params.Values['USER_NAME'] := User;<br>
      IB.Params.Values['PASSWORD'] := Password;<br>
      IB.Params.Values['LC_CTYPE'] := 'WIN1252';<br>
      IB.LoginPrompt := False;<br>
      IB.DataBaseName := ServerPfad;<br>
      Die Variable "ServerPfad" enthält die Felder "Server" + ":" + "absoluter Pfad"
      Cu
      Christia

      Comment


      • #4
        Hallo Christian,<br>

        E)Die Frage nach dem OIT/OAT/Next Transaction kann ich noch nicht beantworten
        <p>
        Gerade die OAT (oldest active transaction) könnte dein Problem sein.
        <br>Im Laufe des Tages wird die Anwendung immer langsamer.
        Das könnte daran liegen, dass ein Transaktion noch offen ist, damit das sweep verhindert.
        <p>
        Prüfen kannst du das auch über den benötigten Hauptspeicher von ibserver.exe.
        <p>
        Heik

        Comment

        Working...
        X