Eu tenho uma tabela no banco de dados cujo tamanho cresceu 15 TB em um mês. Para fazer uma investigação mais aprofundada, usei essa consulta para descobrir qual coluna usou mais páginas.
SELECT SUM(DATALENGTHG(column1)),
SUM(DATALENGTHG(column1)),
...
FROM my_table_name
Uma única coluna tinha 14 TB. Depois de descartar a coluna que usei abaixo da consulta para garantir que o arquivo de dados esteja vazio:
SELECT
OBJECT_SCHEMA_NAME(Parti.object_id) + '.' + OBJECT_NAME(Parti.object_id) AS TableName,
AU.total_pages/128/1024 AS TotalTableSizeInGB,
AU.used_pages/128/1024 AS UsedSizeInGB,
AU.data_pages/128/1024 AS DataSizeInGB
FROM sys.allocation_units AS AU
INNER JOIN sys.partitions AS Parti ON AU.container_id = CASE WHEN AU.type in(1,3) THEN Parti.hobt_id ELSE Parti.partition_id END
LEFT JOIN sys.indexes AS ind ON ind.object_id = Parti.object_id AND ind.index_id = Parti.index_id
inner join sys.objects o on ind.object_id=o.object_id
WHERE 1=1
AND OBJECT_NAME(Parti.object_id) = 'my_table_name'
Mas ainda vejo o mesmo tamanho. Eu tentei fazer backup do arquivo de log. Também tentei o CHECKPOINT e novamente o arquivo de log. Mas nenhuma diferença.
Execute DBCC CLEANTABLE para recuperar o espaço usado pelas colunas varchar eliminadas.
Reconstruir o índice clusterizado também recuperará o espaço, mas requer mais recursos.
Se você estiver usando o
FULL
modelo de recuperação, certifique-se de realizar backups de log durante a operação para evitar o preenchimento do log.DBCC CLEANTABLE
usa um tamanho de lote padrão de 1.000 linhas do argumento opcional de tamanho de lote não especificado.O comando que você está procurando é:
update statistics
A estatística é atualizada automaticamente, mas não com muita frequência. A atualização ocorre se você emitiu alterações (
insert
,update
oudelete
) na tabela e a contagem de alterações excedeunumber_of_rows_at_last_statistic * 0.2
.Se você precisar de atualizações com mais frequência, faça-o manualmente.