Löschen und Neuerstellen großer Objekte
Wenn Sie umfangreiche Indizes löschen oder neu erstellen oder umfangreiche Tabellen löschen oder abschneiden, verschiebt SQL Server 2005-Datenbankmodul den tatsächlichen Zeitpunkt, zu dem die Seitenzuordnung sowie die entsprechenden Sperren aufgehoben werden, bis für die Transaktion ein Commit ausgeführt worden ist. Diese Implementierung unterstützt sowohl Autocommit- als auch explizite Transaktionen in einer Mehrbenutzerumgebung und gilt für umfangreiche Tabellen und Indizes mit über 128 Blöcken.
Datenbankmodul vermeidet die zum Löschen von großen Objekten erforderlichen Zuordnungssperren durch Aufteilen des Vorgangs in zwei separate Phasen: eine logische und eine physikalische.
Während der logischen Phase werden die vorhandenen, von der Tabelle bzw. dem Index verwendeten Zuordnungseinheiten für die Zuordnungsaufhebung markiert und bis zum Commit der Transaktion gesperrt. Bei zu löschenden gruppierten Indizes werden die Datenzeilen kopiert und in neue Zuordnungseinheiten verschoben, die zum Speichern eines neuen gruppierten Indexes oder eines Heaps erstellt werden. (Handelt es sich um das Neuerstellen eines Indexes, werden auch die Datenzeilen sortiert.) Wenn ein Rollback ausgeführt werden muss, braucht dabei lediglich diese logische Phase berücksichtigt werden.
Die physikalische Phase erfolgt, nachdem ein Commit für die Transaktion ausgeführt wurde. Die für die Aufhebung der Zuordnung markierten Zuordnungseinheiten werden batchweise physikalisch gelöscht. Diese Löschvorgänge werden innerhalb von kurzen Transaktionen im Hintergrund behandelt und erfordern nur wenige Sperren.
Da die physikalische Phase erst nach dem Commit der Transaktion erfolgt, scheint der Speicherplatz der Tabelle bzw. des Indexes möglicherweise weiterhin nicht verfügbar zu sein. Ist dieser Speicherplatz jedoch zum Vergrößern der Datenbank erforderlich, bevor die physikalische Phase abgeschlossen ist, versucht Datenbankmodul, Speicherplatz aus den für die Zuordnungsaufhebung markierten Zuordnungseinheiten zu gewinnen. Verwenden Sie die Katalogsicht sys.allocation_units, um den aktuell von diesen Zuordnungseinheiten verwendeten Speicherplatz zu ermitteln.
Verzögerte Löschvorgänge geben zugeordneten Speicherplatz nicht sofort frei, und verursachen so zusätzlichen Aufwand in Datenbankmodul. Daher werden Tabellen und Indizes mit weniger als 128 Blöcken wie in SQL Server 2000 gelöscht, abgeschnitten und neu erstellt. Dies bedeutet, dass sowohl die logische als auch die physikalische Phase vor dem Commit der Transaktion erfolgen.
Siehe auch
Konzepte
Andere Ressourcen
Erstellen und Ändern von Tabellen