[MS SQL SERVER] – Verificando a fragmentação de índices e fazendo sua reorganização

sql server

Para verificar a fragmentação dos índices rode o seguinte comando SQL (basta definir o nome da base na primeira linha):

USE NomedaBase
GO
SELECT a.index_id, name, avg_fragmentation_in_percent
FROM sys.dm_db_index_physical_stats (DB_ID(DB_NAME()),
OBJECT_ID(N'dbo.OCR'), NULL, NULL, NULL) AS a
JOIN sys.indexes AS b ON a.object_id = b.object_id AND a.index_id =
b.index_id WHERE name <> '' ORDER BY avg_fragmentation_in_percent DESC;

Recriar os índices de uma tabela via comando SQL (Basta definir o nome da tabela na primeira linha):

ALTER INDEX ALL ON NomedaTabela
REBUILD WITH (FILLFACTOR = 80, SORT_IN_TEMPDB = ON,
STATISTICS_NORECOMPUTE = ON);
GO

Recriar todos os índices do banco de dados (Definir o nome da base de dados na primeira linha)
Para recriar todos os índices da base de dados pode ser utilizado o seguinte comando SQL (Recomendamos que não seja executado em horário com muitos acessos a base de dados pois os índices ficarão indisponíveis durante o processo):

use NomedaBase
GO
DECLARE @TableName VARCHAR(255)
DECLARE @sql NVARCHAR(500)
DECLARE @fillfactor INT
SET @fillfactor = 80
DECLARE TableCursor CURSOR FOR
SELECT OBJECT_SCHEMA_NAME([object_id])+'.'+name AS TableName
FROM sys.tables
OPEN TableCursor
FETCH NEXT FROM TableCursor INTO @TableName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = 'ALTER INDEX ALL ON ' + @TableName +' REBUILD WITH (FILLFACTOR = ' + CONVERT(VARCHAR(3),@fillfactor) + ')'
EXEC (@sql)
FETCH NEXT FROM TableCursor INTO @TableName
END
CLOSE TableCursor
DEALLOCATE TableCursor
GO

Fonte:
http://wiki.locaweb.com.br/pt-br/%C3%8Dndices_MS_SQL
http://blog.gaudencio.net.br/2013/10/ms-sql-server-verificando-fragmentacao.html

  • ronaldo

    ola
    tem um erro na ultima linha na 1 parte
    b.index_id WHERE name ” ORDER BY avg_fragmentation_in_percent DESC;