Announcement

Collapse
No announcement yet.

Index Plan funktioniert nicht bei Triggern?!

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

  • Index Plan funktioniert nicht bei Triggern?!

    Hallo zusammen,

    suche nun seit ca. 2 Tagen nach einem Problem und habe heute die Ursache gefunden. Hört sich für mich aber eher wie ein Bug an. Aber erst einmal zur Situation:

    Ich habe einen Windows Prozess der die komplette Datenbanksteuerung übernimmt. Wenn er gestartet wird und die Datenbank noch nicht existiert dann erstelle ich diese inkl. aller nötigen Tabellen, Trigger, SP, ....
    Danach ist der Prozess fertig und wartet auf Eingaben von aussen über eine Socket Schnittstelle.

    Das Problem nun:
    Zur Migration von Altdaten in einer anderen Datenbank starte ich direkt am Anfang ein Importtool. Dieses liest die Daten aus der alten Datenbank (MySQL) aus und sendet Sie über die Socketschnittstelle an den Prozess.
    Die Daten werden nun schön sauber eingefügt. Soweit alles gut.
    Das klappt bei allen Tabellen sehr gut bis auf eine!

    Bei einer Tabelle habe ich einen Update Trigger installiert. Werden nun in diese Tabelle Daten geschrieben werden die Insertzeiten immer langsamer.
    Er beginnt mit ca. 100 Sekunden für ca. 10000 Datensätze und schraubt sich dann immer weiter hoch. Nach einiger Zeit haben ich Insertzeiten von 10000 Sekunden!
    Dies passiert aber immer nur dann, wenn ich zur Startzeit des Prozesses eine neue Datenbank erstelle. Exisitert bereits die FB Datenbank bleiben die Insertzeiten komischerweise stabil!

    Die Ursache scheint aber der Updatetrigger zu sein denn bei einem Versuch mit neuer Datenbank und deaktiviertem Updatetrigger bleiben die Zeiten stabil.

    Da der Trigger ja auch einen vernünftigen Plan benötigt damit er schnell ist habe ich mir gedacht, ich aktualisiere die Indexstatistik mal wenn bereits einige Datensätze drin sind. Leider hatte dies aber überhaupt keine Auswirkung, was mich nun sehr stuzig machte. Per Zufall habe ich dann irgendwann zur Laufzeit einfach mal den Trigger nur neu angepackt mittels "ALTER TRIGGER x ACTIVE".
    Und siehe da, auf einmal waren die Inserts wieder schnell und die CPU Belastung sah ganz anders aus!

    Jetzt frage ich mich, muss man die Trigger immer neu committen wenn man die Statistik neu berechnet? Ich hatte eigentlich gedacht, dass der Trigger immer Zugriff auf die aktuellen Statistikwerte hat!
    Merkwürdigerweise scheint aber auch ein Neustart des Prozesses etwas ähnliches zu bewirken.

    Jemand dazu eine Idee?

  • #2
    das ganze klingt eher nach einer komplett ignorierten alten transaktion. Wie sieht denn die Datenbankstatistik aus wenn es langsam ist (gstat oder ibexpert services-database statistics). Dort in erster Linie die Differenz zwischen ältester aktiver und nächster Transaktion.

    Gruß
    Holger
    www.firebird-conference.com

    Comment


    • #3
      Ne, die Transaktionszähler hängen alle zusammen. Da gibt es keine DIfferenz.

      Comment

      Working...
      X