Published on

November 1, 2011

Compreendendo o tamanho das tabelas do SQL Server

Ao trabalhar com o SQL Server, é importante ter um bom entendimento do tamanho das suas tabelas. Saber o tamanho das suas tabelas pode ajudar a otimizar o seu banco de dados e melhorar o desempenho. Neste artigo, discutiremos um script que pode ser usado para calcular o tamanho das suas tabelas no SQL Server.

O script fornecido abaixo calcula o tamanho de cada tabela em um banco de dados, incluindo o número de linhas, tamanho de página reservado, tamanho de dados, tamanho de índice e espaço não utilizado. Ele também fornece o tamanho total do banco de dados e do arquivo de log.

DECLARE @dbsize DECIMAL(19,2),
        @logsize DECIMAL(19,2)

SET NOCOUNT ON

/*
**  Dados de resumo.
*/
BEGIN
        SELECT @dbsize = SUM(CONVERT(DECIMAL(19,2),CASE WHEN type = 0 THEN size ELSE 0 END)) * 8/1024,
                @logsize = SUM(CONVERT(DECIMAL(19,2),CASE WHEN type = 1 THEN size ELSE 0 END)) * 8/1024
        FROM sys.database_files
END

;WITH FirstPass AS (
        SELECT object_id,
                ReservedPage = CONVERT(DECIMAL(19,2),SUM(reserved_page_count)) * 8/1024,
                UsedPage = CONVERT(DECIMAL(19,2),SUM(used_page_count)) *8/1024,
                PageCnt = SUM(
                CONVERT(DECIMAL(19,2),CASE
                        WHEN (index_id < 2)
                                THEN (used_page_count)
                        ELSE lob_used_page_count + row_overflow_used_page_count
                        END
                )) * 8/1024,
                RowCnt = SUM(
                CASE
                        WHEN (index_id < 2)
                                THEN row_count
                        ELSE 0
                END
                )
        FROM sys.dm_db_partition_stats
        GROUP BY object_id
)
,InternalTables AS (
        SELECT ps.object_id,
                ReservedPage = CONVERT(DECIMAL(19,2),SUM(reserved_page_count)) * 8/1024,
                UsedPage = CONVERT(DECIMAL(19,2),SUM(used_page_count)) *8/1024
        FROM sys.dm_db_partition_stats  ps
                INNER Join sys.internal_tables it
                        ON it.object_id = ps.object_id
                        And it.internal_type IN (202,204,211,212,213,214,215,216)
        WHERE it.parent_id = ps.object_id
        GROUP BY ps.object_id
)
,Summary AS (
        SELECT
                ObjName = OBJECT_NAME (F.object_id),
                NumRows = MAX(F.RowCnt),
                ReservedPageMB = SUM(ISNULL(F.ReservedPage,0) + ISNULL(i.ReservedPage,0)),
                DataSizeMB = SUM(F.PageCnt),
                IndexSizeMB = SUM(CASE WHEN (F.UsedPage + ISNULL(i.UsedPage,0)) > F.PageCnt
                                                THEN ((F.UsedPage + ISNULL(i.UsedPage,0)) - F.PageCnt) ELSE 0 END),
                UnusedSpace = SUM(CASE WHEN (F.ReservedPage + ISNULL(i.ReservedPage,0)) > (F.UsedPage + ISNULL(i.UsedPage,0))
                        THEN ((F.ReservedPage + ISNULL(i.ReservedPage,0)) - (F.UsedPage + ISNULL(i.UsedPage,0))) ELSE 0 END),
                dbsizeMB = @dbsize,
                LogSizeMB = @logsize
        FROM FirstPass F
                LEFT Outer Join InternalTables i
                ON i.object_id = F.object_id
        GROUP BY F.object_id
),TotalUnused AS (
SELECT SUM(UnusedSpace) AS UnusedSpace
FROM Summary
)
SELECT ObjName,NumRows, ReservedPageMB, DataSizeMB, IndexSizeMB, S.UnusedSpace, dbsizeMB, LogSizeMB,
        dbsizeMB - TU.UnusedSpace AS TotalDataFreeSpace,
        PercentofDBPhysFile = ((IndexSizeMB + DataSizeMB) / @dbsize) * 100,
        PercentofDBUsedSpace = ((IndexSizeMB + DataSizeMB) / (@dbsize - TU.UnusedSpace)) * 100
FROM Summary S
CROSS APPLY TotalUnused TU
ORDER BY PercentofDBUsedSpace DESC

Este script calcula o tamanho de cada tabela consultando as visualizações e funções do sistema no SQL Server. Ele usa a visualização sys.dm_db_partition_stats para obter informações sobre o número de linhas e contagem de páginas para cada tabela. Ele também usa a visualização sys.database_files para obter o tamanho do banco de dados e do arquivo de log.

O script então calcula o tamanho de página reservado, tamanho de página usado, tamanho de dados, tamanho de índice e espaço não utilizado para cada tabela. Ele também calcula o tamanho total do banco de dados e do arquivo de log.

Ao executar este script, você pode obter uma melhor compreensão do tamanho das suas tabelas e identificar quaisquer tabelas que possam estar ocupando uma quantidade significativa de espaço. Essas informações podem ajudar a otimizar o seu banco de dados e melhorar o desempenho.

Vale ressaltar que este script é apenas uma maneira de calcular o tamanho das suas tabelas no SQL Server. Existem outros scripts e ferramentas disponíveis que podem fornecer informações semelhantes. É sempre uma boa ideia explorar diferentes opções e escolher aquela que melhor atenda às suas necessidades.

Isso é tudo por agora! Fique ligado para mais dicas e truques do SQL Server.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.