none
Performance SQL Server bei grossen Transaktionen RRS feed

  • Frage

  • Hallo zusammen,

    wir verwenden in unseren Programmen grosse Transaktionen, die am Ende mit COMMIT oder ROLLBACK abgeschlossen werden.

    Nun ist neben der Tatsache, dass andere Sessions keinen Zugriff haben solange die Transaktion läuft, die Performance total im Keller. Ich habe den Eindruck, dass das an der Transaktion selber liegt, denn Verbesserungsversuche z. B. mit zusätzlichen Indizes und obtimierten Statements haben nicht die gewünschte Verbesseung gebracht.

    Meine Idee ist keine Transaktion zu öffnen, weil am Anfang der Aufgabe sowieso "alte" Daten gelöscht werden.

    In einem solchen Block werden viele insert, update oder merge - Befehle abgesetzt.

    Kann mir jemand bestätigen, dass das etwas für die Performance bringen könnte, oder hat das keine grossen Auswirkungen?

    Besten Dank im Voraus

    Willi

    Montag, 10. Februar 2020 15:29

Antworten

  • Hallo Willi,

    jedes Datenänderung wird in einer Transaktion durchgeführt, ob Du nun explizit eine startest oder nicht. Sieh Dir lieber mal den Ausführungsplan an.

    Gibt es viele Indizes auf der Tabelle? Indizes beschleunigen Abfragen, verlangsamen aber auch Datenaktualisierungen. Wenn es zu viele sind, könntest Du die nicht oder selten genutzte Indizes entfernen.


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Montag, 10. Februar 2020 16:10
  • Hallo Willi,

    falls es an Sperren liegen könnte und Du mit der Logik der Zeilenversionsverwaltung klar kommen würdest (wie es bei Oracle in der Regel realisiert ist), dann solltest Du Dich zuerst einmal hier einlesen:

    Zeilenversionsverwaltung

    Ansonsten ist natürlich ein sinnvoller Einsatz von Transaktionen (so kurz wie möglich, bzw. die Löschung der Altdaten in einer separaten Transaktion) und gute Performance (wie Olaf schon angeregt hat) äußerst hilfreich.


    Einen schönen Tag noch, Christoph - http://www.insidesql.org/blogs/cmu

    Dienstag, 11. Februar 2020 07:35

Alle Antworten

  • Hallo Willi,

    jedes Datenänderung wird in einer Transaktion durchgeführt, ob Du nun explizit eine startest oder nicht. Sieh Dir lieber mal den Ausführungsplan an.

    Gibt es viele Indizes auf der Tabelle? Indizes beschleunigen Abfragen, verlangsamen aber auch Datenaktualisierungen. Wenn es zu viele sind, könntest Du die nicht oder selten genutzte Indizes entfernen.


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Montag, 10. Februar 2020 16:10
  • Hallo Olaf,

    danke für die Antwort. Vermutlich ist es ein Trigger, der mir alles kaputt macht.

    Montag, 10. Februar 2020 17:16
  • Hallo Willi,

    falls es an Sperren liegen könnte und Du mit der Logik der Zeilenversionsverwaltung klar kommen würdest (wie es bei Oracle in der Regel realisiert ist), dann solltest Du Dich zuerst einmal hier einlesen:

    Zeilenversionsverwaltung

    Ansonsten ist natürlich ein sinnvoller Einsatz von Transaktionen (so kurz wie möglich, bzw. die Löschung der Altdaten in einer separaten Transaktion) und gute Performance (wie Olaf schon angeregt hat) äußerst hilfreich.


    Einen schönen Tag noch, Christoph - http://www.insidesql.org/blogs/cmu

    Dienstag, 11. Februar 2020 07:35