sábado, 30 de maio de 2009

Script para determinar quantidade de bytes utilizados por uma tabela

Hoje vamos implementar um script que retornará o tamanho em bytes de todas as tabelas do banco de dados onde está sendo executado, informando também o número de registros, bytes alocados e tamanho dos índices da tabela.

Utilizaremos para este exemplo, a procedure sp_spaceused que retorna todas as informações desejadas.

Como de praxe, implementaremos uma tabela temporária que recebrá os valores resultantes da execução da procedure que está encapsulada em um loop baseado no cursor com a lista de tabelas do banco de dados. Caso tenha dúvidas de como implementar cursores, pesquisa no blog os artigos anteriores sobre o assunto.

create table #temp(
nome varchar(250),
nroregistros varchar(10),
tamanhoreservado varchar(50),
tamanhousado varchar(50),
tamanhoindice varchar(50),
naousado varchar(50)
)

DECLARE @NAME VARCHAR(250)

DECLARE db_cursor CURSOR FOR
SELECT NAME FROM SYSOBJECTS
WHERE TYPE='U'
ORDER BY 1

OPEN db_cursor

FETCH NEXT FROM db_cursor
INTO @name


WHILE @@FETCH_STATUS = 0
BEGIN

insert into #temp
exec sp_spaceused @name

FETCH NEXT FROM db_cursor
INTO @name

END

CLOSE db_cursor

DEALLOCATE db_cursor

select
nome as [Nome da Tabela],
nroregistros [Número de registros],
tamanhoreservado [Tamanho Reservado],
tamanhousado [Tamanho Usado],
tamanhoindice [Tamanho do Índice],
naousado [Bytes não usados]
from #temp
order by cast(isnull(nroregistros,0) as int) desc

DROP TABLE #temp


Até a próxima.

Um comentário:

Leave your comment here!