Como DBA do SQL Server, tenho trabalhos de manutenção para reconstruir/reorganizar índices regularmente. Recentemente, me perguntei sobre a fragmentação de tabelas no SQL Server. Então eu li o artigo sobre tabelas de heap e sua fragmentação. Verificamos constantemente o status dos servidores SQL de várias maneiras e gostaria de saber se adicionar uma verificação na fragmentação da tabela será útil.
Estou pensando em desenvolver algo como: "É um índice de cluster?" sim -> não faça nada, não -> verifique:
percentage of fragmentation > x%
numbers of forward pointing > x
numbers of rows > x
se x > alguns valores, acione um alerta.
O que você acha de configurar esse tipo de verificação, útil ou não?
A desfragmentação de tabelas heap reduzirá o tamanho físico dos arquivos do banco de dados no disco?
EDITAR:
Eu finalmente uso este pedaço de código para detectar tabelas heap que precisam ser reconstruídas:
SELECT Database_id, Object_name([object_id]) as TableName, Index_type_desc,
Avg_fragmentation_in_percent, rowmodctr, forwarded_record_count
From sys.dm_db_index_physical_stats(db_id(),object_id(''),null,null,'detailed') AS SDDIPS
Inner join sys.sysindexes AS SI on SDDIPS.[object_id] = SI.id
AND SDDIPS.index_id = SI.indid
--Inner join sysobjects AS SO on SI.id = SO.id
Where index_level = 0 AND index_type_desc = 'HEAP' AND Avg_fragmentation_in_percent > 40
AND rowmodctr > 100 AND forwarded_record_count > 1000
No entanto, ele é executado por um longo período de tempo e o desempenho como o colapso do PLE
Eu sugeriria que, em vez de 'rolar por conta própria', você economize muito tempo e esforço e implemente o script de manutenção de índice de Ola Hallengren.
https://ola.hallengren.com/sql-server-index-and-statistics-maintenance.html
E confira os ajustes de Brent Ozar para o roteiro de Ola
https://www.brentozar.com/archive/2014/12/tweaking-defaults-ola-hallengrens-maintenance-scripts/
Não, eles não vão reduzir o tamanho físico dos arquivos. A fragmentação de que estamos falando
logical fragmentation
não é física. De acordo com o BOL, a fragmentação do heap é definida comoLeia mais sobre fragmentação de heap em This SE thread. Eu expliquei o que significa fragmentação de heap.
Na verdade, o conceito de fragmentação não se encaixa em uma pilha, eles são um monte de páginas não ordenadas. O melhor conselho para lidar com o heap é criar um índice clusterizado nele. Observe também que, quando você reconstrói um heap, também reconstrói todos os índices não clusterizados, portanto, tenha cuidado, pois isso gerará muitas E/S e log de transações. Pode haver casos em que você precise reconstruir a pilha para se livrar dos ponteiros de encaminhamento; nesse caso, é claro que você pode ficar de olho no NCI que está sendo reconstruído.
Não acho que receber um alerta quando a fragmentação ultrapassa determinado limite para um índice seja uma boa ideia. Basta definir um plano para reconstruir o índice semanalmente ou duas vezes por semana, o que deve ser suficiente. Você já tem o roteiro de Ola Hallengren à sua disposição.