Olá! Seja bem-vindo!

Hoje veremos como LISTAR o TAMANHO de CADA TABELA do SQL Server individualmente, uma informação bastante relevante tanto para estimativas de crescimento do banco de dados quanto para trabalhos de melhoria de performance.

 

 

Como listar o tamanho de cada tabela do SQL

Nesse artigo inclui duas formas de listar o tamanho de cada tabela do SQL Server. A forma mais simples é utilizando os relatórios do SQL Server Management Studio. Para tanto, basta clicar com o botão direito no banco de dados -> Relatórios -> Relatórios padrão -> Espaço em disco por tabela:

relatório do sql server para espaço em disco por tabela

Se preferir, também é possível gerar essa informação de forma programática, usando o script da aula de hoje:

[sociallocker id=5114]




------------------------------------------------------------------
-- Tamanho & número de registros de cada tabela
------------------------------------------------------------------
-- Banco de testes: Adventureworks2016CTP3 - https://www.microsoft.com/en-us/download/details.aspx?id=49502

----------------------------------------------
-- Relatório do SQL
----------------------------------------------
-- Botão direito no banco de dados -> Relatórios -> Disk Usage per Table

----------------------------------------------
-- Consulta t-SQL
----------------------------------------------
select
	a3.name as proprietario,
	a2.name as tabela,
	a1.rows as registros,
	(a1.reserved + isnull(a4.reserved,0)) * 8 as 'Espaço Total (kb)', 
	a1.data * 8 as 'Dados (kb)',
	(case when (a1.used + isnull(a4.used,0)) > a1.data then (a1.used + isnull(a4.used,0)) - a1.data else 0 end) * 8 as 'Índices (kb)',
	(case when (a1.reserved + isnull(a4.reserved,0)) > a1.used then (a1.reserved + isnull(a4.reserved,0)) - a1.used else 0 end) * 8 as 'Não Usado (kb)'
from (
	select 
		ps.object_id,
			sum (
				case
					when (ps.index_id < 2) then row_count
					else 0
				end
				) as [rows],
			sum (ps.reserved_page_count) as reserved,
			sum (
				case
					when (ps.index_id < 2) then (ps.in_row_data_page_count + ps.lob_used_page_count + ps.row_overflow_used_page_count)
					else (ps.lob_used_page_count + ps.row_overflow_used_page_count)
				end
				) as data,
			sum (ps.used_page_count) as used
	from sys.dm_db_partition_stats ps
	where ps.object_id not in (select object_id from sys.tables where is_memory_optimized = 1)
	group by ps.object_id) as a1
left outer join (
	select 
		it.parent_id,
		sum(ps.reserved_page_count) as reserved,
		sum(ps.used_page_count) as used
	 from sys.dm_db_partition_stats ps
	 inner join sys.internal_tables it on (it.object_id = ps.object_id)
	 where it.internal_type in (202, 204)
	 group by it.parent_id) as a4 on (a4.parent_id = a1.object_id)
inner join sys.all_objects a2  on ( a1.object_id = a2.object_id)
inner join sys.schemas a3 on (a2.schema_id = a3.schema_id)
where a2.type <> 's' and a2.type <> 'it'
order by a3.name, a2.name

[/sociallocker]

CONCLUSÃO

Seja para estimar crescimento ou para melhorias de performance, já usei alguma dessas duas estratégias em quase todos os clientes que já atendi.

Estou certo que apesar da simplicidade, essa informação é bastante útil independentemente de você administrar um SQL, desenvolver para SQL ou trabalhar com data warehouse.

Espero que também tenha gostado desse conteúdo.

Abraço do seu amigo Josué 🙂

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *