Páginas

segunda-feira, 21 de outubro de 2013

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

Verificando a fragmentação

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 

4 comentários:

  1. Emerson, muito obrigado por compartilhar seu conhecimento. Foi de grande ajuda para mim.
    Valeu

    ResponderExcluir
    Respostas
    1. Daniel,
      Obrigado por visitar o Blog, que bom ajudou.
      Grande Abraço.

      Excluir
  2. Emerson boa tarde !
    Muito obrigado sou iniciante vai me ajudar.
    Obrigado

    ResponderExcluir
  3. Msg 102, Level 15, State 1, Line 4
    Incorrect syntax near ')'.

    Porque desse erro ao tentar executar Verificando a fragmentação ?

    ResponderExcluir