Kürzlich habe ich einer Tabelle mit fast 500 Millionen Zeilen eine NULL-fähige Bitspalte hinzugefügt. Es gibt keine Standardeinstellung für die Spalte, jedoch geben alle Einfügungen den Wert 0 oder 1 an, und ich habe eine einmalige Routine ausgeführt, um allen vorhandenen Zeilen 0 oder 1 zuzuweisen (Aktualisierung der Zeilen in kleinen Stapeln). Jede Zeile sollte jetzt eine 0 oder 1 in dieser Spalte haben.
Ich möchte, dass die Bit-Spalte nicht auf Null gesetzt wird. Als ich dies jedoch über versuchte ALTER TABLE t1 ALTER COLUMN c1 bit not null
, lief sie 3 Minuten lang und ich habe sie gestoppt, weil alle Lesevorgänge für die Tabelle blockiert wurden und ich vermutete, dass der Abschluss lange dauern würde . Es ist möglich, dass es nicht zu lange dauert, aber ich könnte nicht zu viel Nichtverfügbarkeit riskieren. Das Rollback selbst dauerte 6 Minuten.
Haben Sie Vorschläge, wie ich die Spalte nicht nullfähig machen kann, ohne dass dies möglicherweise Stunden in Anspruch nimmt? Kann ALTER TABLE ALTER COLUMN
ich außerdem abschätzen, wie lange es dauern würde, bis die von mir gestartete und dann stornierte Abrechnung abgeschlossen ist?
Ich verwende SQL Server 2017 Web Edition.
SELECT c1, count(*) FROM t1 GROUP BY c1
was ungefähr 9 Minuten dauerte. Die eigentlicheALTER TABLE ALTER COLUMN
Aussage danach dauerte 25 Minuten. Nicht so schlecht.