Wie können Sie den Fortschritt eines SQL-Updates verfolgen?

7

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

    
Matt 21.01.2011, 01:17
quelle

3 Antworten

-1

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.

    
OMG Ponies 21.01.2011, 01:23
quelle
22

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.

%Vor%

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.

%Vor%

Bitte führen Sie keine (nolock) zählenden Abfragen in der Tabelle itself aus, während sie aktualisiert wird.

    
RichardTheKiwi 21.01.2011 01:44
quelle
1

Nicht wirklich ... Sie können mit dem Nolock-Hinweis und dem gleichen wo abfragen, aber das erfordert Ressourcen

Es ist natürlich keine optimale Abfrage mit einem führenden Platzhalter ...)

    
gbn 21.01.2011 01:29
quelle

Tags und Links