Verificando tamanho das tabelas no SQL Server

Olá pessoal…

Hoje vou mostrar como verificar todas as tabelas de um esquema no SQL Server, e todos os tamanhos em KB.


SQL Server
SQL Server

Para fazer uma busca pegando todas as tabelas, precisamos relacionar sys.tables com o sys.schemas.

Para pegar o tamanho, é necessário relacionar o sys.indexes com o sys.tables, o sys.partitions com o sys.indexes e por último o sys.allocation_units com o sys.partitions.

Ficando similar a:

FROM 
    sys.tables tabelas
	INNER JOIN sys.schemas esquemas ON (
		esquemas.schema_id = tabelas.schema_id
	)
	INNER JOIN sys.indexes indices ON (
		tabelas.OBJECT_ID = indices.object_id
	)
	INNER JOIN sys.partitions particoes ON (
		indices.object_id = particoes.OBJECT_ID 
		AND indices.index_id = particoes.index_id
	)
	INNER JOIN sys.allocation_units alocacao ON (
		particoes.partition_id = alocacao.container_id
	)

Depois basta filtrar os dados para trazer somente as tabelas e o agrupamento dos dados. Abaixo um print da consulta executada.

Consulta executada
Consulta executada

Abaixo o código completo:

SELECT 
    esquemas.Name AS Esquema_Nome,
    tabelas.NAME AS Tabela_Nome,
    particoes.rows AS Numero_Linhas,
    SUM(alocacao.total_pages) * 8 AS Espaco_KB_Total, 
    SUM(alocacao.used_pages) * 8 AS Espaco_KB_Usado, 
    (SUM(alocacao.total_pages) - SUM(alocacao.used_pages)) * 8 AS Espaco_KB_Sem_Uso

FROM 
    sys.tables tabelas
	INNER JOIN sys.schemas esquemas ON (
		esquemas.schema_id = tabelas.schema_id
	)
	INNER JOIN sys.indexes indices ON (
		tabelas.OBJECT_ID = indices.object_id
	)
	INNER JOIN sys.partitions particoes ON (
		indices.object_id = particoes.OBJECT_ID 
		AND indices.index_id = particoes.index_id
	)
	INNER JOIN sys.allocation_units alocacao ON (
		particoes.partition_id = alocacao.container_id
	)

--Filtra somentes tabelas, filtra somente as criadas por usuário
WHERE 
    tabelas.NAME NOT LIKE 'dt%'
    AND tabelas.is_ms_shipped = 0
    AND indices.OBJECT_ID > 255 

--Agrupando pela Tabela, Esquema e Número de linhas
GROUP BY 
    tabelas.Name, esquemas.Name, particoes.Rows

--Ordenando pelo esquema, seguido pelas tabelas
ORDER BY 
    Esquema_Nome, Tabela_Nome

Referências:
stackoverflow.com/questions/7892334/get-size-of-all-tables-in-database

Bom pessoal, por hoje é só.
Abraços e até a próxima.

About Dan_Atilio

Analista e desenvolvedor de sistemas. Técnico em Informática pelo CTI da Unesp. Graduado em Banco de Dados pela Fatec Bauru. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor do projeto Terminal de Informação, onde são postados tutoriais e notícias envolvendo o mundo da tecnologia.

2 opiniões sobre “Verificando tamanho das tabelas no SQL Server

  • dezembro 21, 2016 em 8:16 am
    Permalink

    O Daniel San eh fera, e este foi mais um post show de bola. Vlw meu amigo.

    Resposta

Deixe uma resposta