Um banco de dados SQL Server 2008 R2 Standard Edition tem uma tabela de preparação sem índices, oito varchar(50)
e uma varchar(255)
colunas e 162.676 linhas. Eu esperaria que esta tabela não tivesse muito mais de 100 MB de tamanho, mas na verdade excede 7,5 GB.
O que pode causar isso? Suspeito que posso resolver o problema adicionando um índice clusterizado ou recriando a tabela completamente, mas quero entender o que está acontecendo que faz uma tabela de preparação inflar a proporções tão ridículas. Aqui está o que reuni como dados pertinentes até agora:
sys.dm_db_index_physical_stats (DETAILED)
fragment_count = 1056
page_count = 964392
forwarded_record_count = 0
sp_spaceused @objname = 'db.schema.table',@updateusage = 'TRUE'
reserved = 7716888 KB
data = 7715136 KB
index_size = 24 KB
unused = 1728 KB
sys.allocation_units
total_pages = 964611
used_pages = 964395
data_pages = 964392
Alguém pode me dizer por que essa mesa está ocupando tanto espaço?
As chances são de que muitos dados foram atualizados ou excluídos, ou você ajustou o tamanho de algumas de suas colunas, ou truncou/excluiu a tabela e recarregou várias vezes. Algumas dessas operações podem levar a espaço não recuperado em alguns cenários. Eu tentaria isso primeiro:
Em seguida, consideraria adicionar um índice clusterizado.
Provavelmente, o layout da tabela física é muito diferente do layout lógico. Isso é especialmente verdadeiro com tabelas de preparação. Consulte as colunas da tabela do SQL Server para obter mais detalhes, incluindo uma consulta que mostrará o layout físico: