Este script SQL foi desenvolvido para gerar um relatório detalhado sobre o tamanho das tabelas no SQL Server. Ele fornece informações essenciais sobre o espaço ocupado pelas tabelas no banco de dados, como:
- O nome da tabela.
- O número de registros (ou linhas) presentes na tabela.
- O tamanho total da tabela em kilobytes (KB).
- O tamanho usado pela tabela em KB.
- O tamanho não utilizado pela tabela em KB.
Esse relatório é uma ferramenta útil para avaliar o uso de espaço nas tabelas, o que é fundamental para a otimização de armazenamento e desempenho do banco de dados.
⚙️ Objetivo e Funcionamento
Este script permite realizar uma análise detalhada do uso de espaço nas tabelas do banco de dados. Ele calcula:
- Tamanho Total da tabela.
- Tamanho Usado na tabela.
- Tamanho Não Utilizado na tabela.
Além disso, o script filtra as tabelas com base no nome (por exemplo, apenas tabelas que começam com a letra 'C').
🧑💻 Exemplo de Script:
SELECT
t.NAME AS 'Table',
p.rows AS 'Registers',
SUM(a.total_pages) * 8 AS 'TamTotal(KB)',
SUM(a.used_pages) * 8 AS 'TamUsado(KB)',
(SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS 'TamNaoUsado(KB)'
FROM
sys.tables t
INNER JOIN
sys.indexes i
ON t.OBJECT_ID = i.object_id
INNER JOIN
sys.partitions p
ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN
sys.allocation_units a
ON p.partition_id = a.container_id
LEFT OUTER JOIN
sys.schemas s
ON t.schema_id = s.schema_id
WHERE
t.NAME LIKE 'C%'
AND t.is_ms_shipped = 0
AND i.OBJECT_ID > 255
GROUP BY
t.Name, s.Name, p.Rows
ORDER BY
Registers DESC
📝 Explicação do Script:
-
Tabelas e Joins:
- sys.tables: Contém informações sobre todas as tabelas no banco de dados.
- sys.indexes: Fornece informações sobre os índices de cada tabela.
- sys.partitions: Contém informações sobre as partições das tabelas.
- sys.allocation_units: Fornece detalhes sobre o uso de espaço nas unidades de alocação.
- sys.schemas: Contém informações sobre os esquemas no banco de dados.
-
Filtros:
- t.NAME LIKE 'C%' : Filtra tabelas cujo nome começa com 'C'.
- t.is_ms_shipped = 0 : Exclui tabelas do sistema que são embarcadas com o SQL Server.
- i.OBJECT_ID > 255 : Exclui índices internos que não são relevantes para a análise.
-
Cálculos:
- SUM(a.total_pages) * 8 AS 'TamTotal(KB)' : Calcula o tamanho total da tabela em KB.
- SUM(a.used_pages) * 8 AS 'TamUsado(KB)' : Calcula o tamanho usado pela tabela em KB.
- (SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS 'TamNaoUsado(KB)' : Calcula o tamanho não utilizado da tabela em KB.
-
Ordenação:
- O resultado é ordenado pelo número de registros na tabela (Registers), em ordem decrescente, para destacar as tabelas com maior número de registros.
💡 Usos e Benefícios:
Este script é extremamente útil para:
- Monitorar o espaço ocupado por tabelas específicas no banco de dados.
- Avaliar o uso de espaço para realizar otimizações de desempenho.
- Identificar tabelas que podem estar subutilizadas ou inutilizadas, otimizando o armazenamento.
- Planejamento de crescimento de banco de dados, ao entender melhor o comportamento de uso de espaço pelas tabelas.
Além disso, ao filtrar tabelas pelo nome (por exemplo, com 'C%' ), você pode facilmente personalizar o relatório conforme suas necessidades.
🧮 Analisando os Resultados:
Após a execução do script, o relatório gerado inclui os seguintes dados:
- Table: O nome da tabela.
- Registers: O número total de registros (linhas) na tabela.
- TamTotal(KB): O tamanho total da tabela em kilobytes.
- TamUsado(KB): O tamanho efetivamente utilizado da tabela em kilobytes.
- TamNaoUsado(KB): O tamanho que está alocado, mas não utilizado, da tabela em kilobytes.
A ordem decrescente de Registers ajuda a identificar as tabelas com maior número de registros, o que pode ser útil para priorizar ações de otimização ou monitoramento.
⚙️ Modificações e Customizações:
Este script pode ser facilmente modificado para atender a necessidades específicas. Por exemplo:
- Para filtrar tabelas com um nome diferente de 'C%', basta ajustar o filtro:
WHERE t.NAME LIKE 'A%' --- Para tabelas começando com 'A'
- Se você deseja incluir tabelas do sistema, remova ou altere o filtro t.is_ms_shipped = 0 .
🚀 Conclusão
Este script SQL oferece uma maneira prática e eficiente de monitorar e otimizar o espaço ocupado pelas tabelas no SQL Server. Com ele, você pode rapidamente avaliar o uso de espaço, identificar possíveis melhorias no armazenamento e melhorar o desempenho do seu banco de dados.