Fragensteller
MS SQL 2012EE, Shrink auf DB mit Columnstore-Index

Frage
-
Hallo zusammen,
wir verwenden eine Anwendung welche über DataWarehouse Daten aufbereitet und anderes. Da hier sehr viele Datanoperationen stattfinden, ist die DB und das LOG beachtlich gross geworden.
Nun wollte ich diese Datenbanken shrinken, für die DB's wird aber Columnstore-Index verwendet, damit schlägt der Shrink fehl.
Da das arbeiten mit DataWarehouse neu für mich ist, will ich erst mal nicht darauf los experimentieren.
Mein Plan war ein Cursor zu bauen der alle DB's durchgeht welche mit "_DWDB_..." anfängt um diese dann per SQL Agent Job in der Nacht zu shrinken.
Wie finde ich aber die Column per Script um diese für den Shrink zu disablen und danach wieder enablen?
Viele Grüsse,
Maximilian
- Bearbeitet MaxiTesch Samstag, 6. September 2014 06:34
Alle Antworten
-
Hallo Maximilian,
Du solltest das ganze Vorhaben noch einmal überdenken.
Der einzige sinnvolle Grund wäre, wenn es sich um eine einmalige / seltene Aktion handelt, die durch außergewöhnliche Aktivitäten begründet ist - periodisch nutzt es nur die Hardware ab ;)
Wenn Datenbank und Protokoll für die regelmäßige Verarbeitung diese Größe benötigen, bringt ein "Einschrumpfen" nichts. Eher wird die Verarbeitung behindert, weil die Dateien während der Verarbeitung vergrößert werden müssen. Was Zeit kostet und zu einer Fragmentierung der Daten führt.
Vorteile bringt es keine, denn der zwischenzeitlich geschaffene Platz wird später wieder benötigt, muss also ohnehin vorgehalten werden.
Was die Column Store Indizes angeht: Die müssen für das Verkleinern deaktiviert und anschließend neu erstellt werden. Was eine weitere Aktivität ohne Gewinn ist. Siehe Verkleinern einer Datenbank
Gruß Elmar
- Bearbeitet Elmar BoyeEditor Samstag, 6. September 2014 08:01
- Als Antwort vorgeschlagen Andreas.WolterMicrosoft employee Samstag, 6. September 2014 13:49
-
Hallo Maximilian,
Siehe MSDN CREATE CLUSTERED COLUMNSTORE INDEX (Transact-SQL) => Limitations and Restrictions:
"Cannot be changed by using the ALTER INDEX statement. To change the nonclustered index, you must drop and re-create the columnstore index instead. You can use ALTER INDEXto disable and rebuild a columnstore index."
Disable ist also eine der wenigen erlaubte Modifikationen an einem ColumnStore Index und kann per einfachem ALTER Befehl ausgeführt warden:
ALTER INDEX [ColumnStoreIndexName] ON [dbo].[TableName] DISABLE
Nur vom Shrink möchte ich abraten, das fragmentiert alle anderen Indizes und das geht zu Lasten der Performanz.Olaf Helper
[ Blog] [ Xing] [ MVP] -
Hallo zusammen,
vielen Dank für die Infos, dann werde ich auf das Shrinken verzichten und eher darauf drängen das wir mehr DiskSpace bekommen. Da es ein virtueller Server ist, wäre das Problem "nur" die Anschaffung bzw Vergrösserung der Storage :-)
Mit Eurer Antwort fühle ich mich schon besser im kommenden Meeting.
Besten Dank,
Maximilian