Nehmen wir an, ich habe ein Update wie:
%Vor%Dieses Update wird im Grunde Millionen von Zeilen durchlaufen und den Doppelpunkt trimmen, wenn es einen in der Spalte c1 gibt.
Wie kann ich verfolgen, wie weit es in der Tabelle fortgeschritten ist?
Danke
Dies ist SQL Server 2008
Datenbankabfragen, insbesondere Data Manipulation Language (DML), sind atomar. Das bedeutet, dass das INSERT / UPDATE / DELETE entweder erfolgreich ausgeführt wird oder nicht. Es gibt keine Möglichkeit zu sehen, welcher Datensatz verarbeitet wird - in der Datenbank wurden alle geändert, nachdem das COMMIT nach dem UPDATE ausgegeben wurde. Selbst wenn Sie in der Lage waren, die Datensätze in Bearbeitung zu sehen, wird die Abfrage zu dem Zeitpunkt, zu dem Sie den Wert sehen würden, zu anderen Datensätzen fortgeschritten sein.
Das einzige Mittel, um zu wissen, wo in dem Prozess die Abfrage in einer Schleife ausgeführt wird, können Sie einen Zähler verwenden, um zu wissen, wie viele verarbeitet werden. Es ist üblich, dies zu tun, so dass große Datenmengen regelmäßig festgeschrieben werden, um das Risiko eines Fehlers zu minimieren, bei dem die gesamte Abfrage erneut ausgeführt werden muss.
Sie können die Tabelle sysindexes verwenden, die angibt, um wie viel sich ein Index geändert hat. Da dies in einem atomaren Update durchgeführt wird, hat es keine Chance, Statistiken neu zu berechnen, so dass rowmodctr
weiter wächst. Dies ist manchmal in kleinen Tabellen nicht bemerkbar, aber für Millionen wird es angezeigt.
Führen Sie nun in einem anderen Abfragefenster das unten stehende fortlaufend aus und beobachten Sie, wie das Rowmodctr hoch und runter geht. rowmodctr
vs rows
gibt Ihnen eine Idee, wo Sie vorhaben, wenn Sie wissen, wo rowmodctr
am Ende sein muss. In unserem Fall sind es 67% von knapp über 2 Millionen.
Bitte führen Sie keine (nolock) zählenden Abfragen in der Tabelle itself
aus, während sie aktualisiert wird.
Tags und Links sql sql-server progress tracking