Announcement

Collapse
No announcement yet.

Update-Statement braucht immer länger ...

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

  • Update-Statement braucht immer länger ...

    Hallo,

    habe eine MSDE sp3a unter w2k auf meinem Rechner laufen und irgendwie ein Verhalten, das mir bisher noch nie so aufgefallen ist. Aber seit einiger Zeit sind Updates auf Tabellen mit mehreren tausend Records vom Zeitverhalten her zäh bis unbrauchbar.<br>
    Die Datenbank ist mit Wiederherstellung "einfach" angelegt, alle Optionen wie autoStatistik usw. sind deaktiviert, der Server ist mit fixem Arbeitsspeicher von 300 Mb festgelegt, kommt aber, wenn ich das im Taskmanager mitverfolge, selten über 30 Mb Speicherbedarf.<br>
    Die Tabelle hat auch nichts besonderes, es liegt kein Index auf dem zu ändernden Feld, keine Replikation oder sonstwas aktiv. Aber wenn ich jetzt zB ein Statusfeld, definiert als char(1), und ich habe 20.000 Records in der Tabelle, global umsetzen will, dann wird das nie fertig. Bei Einschränkungen auf eine Teilmenge sieht das etwa so aus:<br>
    nur 1000 Records updaten = 1 Sekunde<br>
    2000 Records updaten = 5 Sekunden<br>
    3000 Records updaten = 10 Sekunden<br>
    4000 Records updaten = 17 Sekunden<br>
    5000 Records updaten = 26 Sekunden<br>
    6000 Records updaten = 37 Sekunden<br>
    7000 Records updaten = 52 Sekunden<br>
    ...<br>
    10000 Records = 2:36<br>
    ...<br>
    20000 Records = 14:03

    Der Prozessor werkelt dabei immer mit 100%, habe aber nichts nebenbei laufen!<br>
    Am Rechner liegt es aber wohl nicht, ein AMD XP 2500+ mit 1Gb Hauptspeicher und schneller 100Gb WD-Platte mit 8Mb Cache sind sicher nicht der bremsende Faktor. Festplattenaktivität ist sehr wenig, Cache Platte/Betriebssystem sollte also funktionieren.<br>
    Eine Leistungseinschränkung auf Benutzerbasis kann es nicht sein, ein nachfolgendes "dbcc concurrencyviolation" zeigt immer alles mit '0' an.<br>
    Was mache ich da, wenn da mal 200.000 Records drinnenstehen? Das ist doch nicht normal.

    Ach ja, habe dann das Update mal immer in 1000er-Blöcken gemacht, also immer so:<br>
    update tabelle set status = '1' where id > 1000 and id <= 2000<br>
    update tabelle set status = '1' where id > 2000 and id <= 3000<br>
    ...<br>
    da schwankten die Zeiten zwischen 1 und 3 Sekunden je Block, gibt bei einem Mittelwert von 2 Sekunden und 20 Blöcken eine Gesamtzeit von 40 Sekunden, das ist um den Faktor 22 schneller, als wenn ich's auf einmal mache.<br>
    Bin für jeden Tip dankbar.

    Helmut

  • #2
    Problem gelöst!<br>
    Manchmal sollte man vorher ein wenig nachdenken - ich habe da noch einen Trigger an der Tabelle hängen, der wurde mal erweitert und seitdem dieser Zeitbedarf.

    Hoffe, es hat noch keiner seine Zeit in dieses Problem verschwendet...

    Helmu

    Comment

    Working...
    X