SQL Server: Relatório de Tamanho de Tabelas no SQL Server 🔍

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.

 

Data de Publicação: 21-10-2023

Categoria: SQL Server