SQL Practice Blog – SQL Server, BizTalk und .NET Erfahrungen

Update auf große Datenmengen mit @@ROWCOUNT

leave a comment »

Häufig steht man vor der Herausforderung in einer sehr großen Tabelle Datensätze zu aktualisieren. Hat diese z.B. wie in meinem Szenario über 10 Millionen Datensätze und einen Trigger der auf Update Commands reagiert, ist es nicht sehr sinnvoll mit einem mal mehr als 1000 Zeilen zu aktualisieren. Hierbei kann es zu ungewollten Table Locks kommen. Noch problematischer wird es, wenn während des Zeitpunktes des Updates viele Abfragen auf dieser Tabelle ausgeführt werden.

Der erste Lösungsansatz bei diesem Problem ist ein eingeschränkter Update Befehl auf 1000 Zeilen. Diese kann man mit einem UPDATE TOP (1000) und ebenso mit dem Befehl SET ROWCOUNT 1000 erreichen (Siehe Beispiele).

image

Möchte man nun etwa 100000 Zeilen aktualisieren empfiehlt es sich hierfür eine Schleife zu bauen. Außerdem sollte nach jedem Updatebefehl eine Wartezeit von 1-3 Sekunden eingefügt werden, damit andere Anfragen die Möglichkeit haben Sperren zu setzen. Dies erreicht man durch den Befehl WAITFOR DELAY. Hier ein Beispiel:

image

Der gesamte Updatevorgang kann dadurch etwas länger dauern, man minimiert jedoch die Wahrscheinlichkeit von Locks über die ganze Tabelle und erlaubt z.B. Triggern optimaler zu arbeiten.

Written by Robert Meyer

Juli 11, 2012 um 10:38

Veröffentlicht in SQL Server

Tagged with , , ,

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: