DBCC CLEANTABLE

Oopps! Upgrade your browser pretty please. Oopps! Upgrade your browser pretty please.

Antag att du har en tabell med bla en kolumn som är av variabel längd tex VARCHAR(), NVARCHAR(), VARBINARY osv…
Om man nu tar bort variabel längds kolumnen kan man förvänta sig att tabellen minskar i storlek.
Vi testar.

Skapa en tabell:
CREATE TABLE Test (ID INT IDENTITY(1,1), Col VARCHAR(MAX));

Vi fyller tabellen med data:
INSERT INTO Test(Col) VALUES(REPLICATE(‘A’, 1000));
GO 1000

Vi undersöker hur stor tabellen blivit:
SELECT alloc_unit_type_desc, page_count, avg_page_space_used_in_percent, record_count
FROM sys.dm_db_index_physical_stats( DB_ID(‘SQLService’),OBJECT_ID(N’Test’),NULL,NULL,’Detailed’);

Ovan kan vi se att tabellen är utspridd på 150 data pages med ca 84% fyllnadsgrad.

Vi tar nu bort kolumnen “Col” för att frigöra utrymme:
ALTER TABLE Test DROP COLUMN Col;

En ny titt på hur stor vår tabell är visar att det inte hänt någonting, tabellen upptar fortfarande ca 84% av alla data pages.

För att frigöra utrymmet måste man använda sig av DBCC CLEANTABLE.

Vi kör:
DBCC CLEANTABLE(‘DatabasNamn’,’Tabellnamn’,0);

Om vi nu återigen kontrollerar hur fyllnadsgraden ser ut för vår tabell visar det sig att den gått ner till ca 1%, vi har således återfått utrymmet för den borttagna kolumnen.