sexta-feira, 12 de abril de 2013

Descobrindo o espaço usado por cada tabela no banco de dados

Para saber quanto uma tabela está usando de espaço num banco de dados, basta usar a stored procedure 'sp_spaceused' e o nome da tabela como parâmetro:


sp_spaceused tabela

name rows reserved  data index_size  unused
tabela 3650326  1415392 KB 1204728 KB  210440 KB  224 KB


Mas se eu quiser saber quanto cada tabela de um banco de dados está ocupando?
Vamos usar uma outra stored procedure, 'sp_MSforeachtable'.

É aí que entra esse script que resolve nosso problema:


CREATE TABLE #TabelaTemporaria
(
    [name] NVARCHAR(128),
    [rows] CHAR(11),
    reserved VARCHAR(18),
    data VARCHAR(18),
    index_size VARCHAR(18),
    unused VARCHAR(18)
)

insert #TabelaTemporaria exec sp_MSforeachtable 'EXEC sp_spaceused ''?'''

select [name] as Tabela, [rows] as Linhas,
cast(replace(reserved, ' KB','') as int) as Reservado,
cast(replace(data, ' KB','') as int) as Dados,
cast(replace(index_size, ' KB','') as int) as Tam_Index,
cast(replace(unused, ' KB','') as int) as NaoUsado
into #TabelaFinal
from #TabelaTemporaria

select * from #TabelaFinal order by Reservado desc

drop table #TabelaFinal
drop table #TabelaTemporaria

O resultado será parecido com esse:









Neste caso, já sabemos quem é a tabela que está alocando mais espaço dentro do banco de dados.

Nenhum comentário: