Depois de limpar minha tabela com DELETE FROM MyTable
(e executar DBCC shrinkdatabase('MyDB')
, caso isso importe), eu executo a instrução EXEC sp_spaceused MyTable
. Os resultados me confundem:
tableName numberOfRows reservedSize dataSize indexSize unusedSize
--------- ------------ ------------ -------- --------- ----------
MyTable 0 21664 KB 20672 KB 736 KB 256 KB
Como você pode ver, não há linhas, mas há quase 21 MB de dados. Minha pergunta é: quais são as possíveis causas para esta situação e/ou como posso investigar mais a fundo?
DELETE não recupera espaço, ele exclui linhas.
O espaço pode permanecer alocado por vários motivos, 3 dos quais são:
Tentar
EXEC sp_spaceused 'MyTable', 'true'
para forçar uma atualização de espaço usadoTRUNCATE TABLE
que desaloca espaço, em vez de excluir linhasDELETE myTABLE WITH (TABLOCKX)
se não houver índice clusterizado e não puder usar TRUNCATENão corra
DBCC shrinkdatabase
porque não agrega valor e simplesmente vai crescer de novo