Gestern hatte ich diese seltsame (nie zuvor gesehen) Situation, wenn Sie einen Patch auf mehrere Datenbanken von SQL Server Management Studio anwenden. Ich musste eine große Tabelle (5 Millionen Datensätze) über mehrere Datenbanken aktualisieren. Die Anweisung, die ich pro Datenbank abgab, war etwas wie:SQL Server gibt Ergebnis sofort zurück
set rowcount 100000
select 1
while @@rowcount > 1
update table
set column = newval
where column is null
Diese Anweisungen liefen für einige Sekunden (irgendwo zwischen 2 und 30 Sekunden). Auf einer zweiten Registerkarte habe ich diese Abfrage ausgeführt:
select count(*)
from table
where column is null
Nur um zu überprüfen, wie viele Zeilen bereits verarbeitet wurden. Ungeduldig wie ich bin, habe ich F5 für die Anzahl (*) Aussagen alle 20 Sekunden oder so gedrückt. Und das - erwartete Verhalten - war, dass ich auf etwas im Bereich von 0 bis 30 Sekunden warten musste, bevor der Count (*) berechnet wurde. Ich erwartete dieses Verhalten, da die update-Anweisung ausgeführt wurde, so dass der count (*) als nächstes in der Zeile war.
Aber dann nach einer Datenbank oder 10 ist diese seltsame Sache passiert. Ich öffnete die nächste Datenbank (änderte die Datenbank über USE) und nach Drücken von F5 reagierte die Zählung (*) sofort. Und nach erneutem Drücken von F5, direktes Ergebnis, aber ohne Fortschritt, und immer wieder hat sich die Zählung (*) nicht geändert. Das Update wurde jedoch ausgeführt.
Und dann nach n-ten drücken, die Anzahl (*) sank mit genau 100K Datensätze. Ich habe F5 erneut gedrückt, sofortiges Ergebnis ... und so weiter und so weiter ... WARUM? war nicht die Zählung (*) warten ... Ich durfte nicht schmutzig lesen oder ....
Nur diese Datenbank gab mir dieses Verhalten. Und ich habe wirklich keine Ahnung, was das verursacht.
Zwischen Switching-Datenbank habe ich keine andere Registerkarte geschlossen oder geöffnet, so dass das einzige, was ich mir vorstellen kann, ist, dass die Verbindungsparameter für diese eine Datenbank unterschiedlich sind. Aber ich übersehe diese ... aber ich finde keinen Unterschied.
Vielleicht hat diese Datenbank eine andere Isolationsstufe? –
Überprüfen Sie die Datenbankeinstellungen. Vielleicht ist das Read Committed Snapshot oder/Snapshot Isolation Level aktiviert? – Jeffrey
Um ehrlich zu sein: Was du machst ist etwas was du nicht tun solltest, ungeduldig oder nicht ... Vor allem: Schleifen sind * böse, langsam und böse * und ich bezweifle, dass du sie wirklich brauchst (könnte deine tatsächliche Aussage zeigen) . Zweitens ist das Überprüfen des Fortschritts mit einer zweiten Verbindung wie - ähm - Ziehen von Gras, um es schneller wachsen zu lassen :-) Deine Anrufe sind nichts anderes als störend und Dinge langsamer zu machen. Besser gehen Sie auf einen Kaffee :-) – Shnugo