DBCC INDEXDEFRAG
24/01/2014
0
Ao pesquisar sobre o INDEXDEFRAG, vi que muitos criticam e a maioria elogia, alguém já utilizou esta prática e teria alguma recomendação se devo ou não utilizá-la em uma tabela de movimentação?
Teria algum outro comando que realiza tipo uma desfragmentação do próprio banco de dados, para melhorar o seu desempenho?
Rafael Dantas
Posts
24/01/2014
Fabrício Lima
Muito cuidado pois essa operação faz lock nas tabelas e enche o arquivo de log do SQL.
declare @Id int,@SQLString nvarchar(4000)
select identity(int,1,1) Id, 'ALTER INDEX ' + B.Name + ' ON ' + C.Name +
case when Avg_Fragmentation_In_Percent < 20 then ' REORGANIZE' else ' REBUILD' end Comando
INTO #Indices_Fragmentados
from sys.dm_db_index_physical_stats(db_id(),null,null,null,null) A
join sys.indexes B on a.object_id = B.Object_id and A.index_id = B.index_id
join sys.sysobjects C on C.id = B.Object_id
where avg_fragmentation_in_percent > 5
and Page_Count > 1000
WHILE exists (SELECT Id FROM #Indices_Fragmentados)
BEGIN
SELECT TOP 1 @Id = Id , @SQLString = Comando
FROM #Indices_Fragmentados
-- Realiza o REORGANIZE OU O REBUILD
EXECUTE sp_executesql @SQLString
DELETE FROM #Indices_Fragmentados
WHERE Id = @Id
END
Script mais complexo:
http://ola.hallengren.com/sql-server-index-and-statistics-maintenance.html
27/01/2014
Rafael Dantas
Muito cuidado pois essa operação faz lock nas tabelas e enche o arquivo de log do SQL.
declare @Id int,@SQLString nvarchar(4000)
select identity(int,1,1) Id, 'ALTER INDEX ' + B.Name + ' ON ' + C.Name +
case when Avg_Fragmentation_In_Percent < 20 then ' REORGANIZE' else ' REBUILD' end Comando
INTO #Indices_Fragmentados
from sys.dm_db_index_physical_stats(db_id(),null,null,null,null) A
join sys.indexes B on a.object_id = B.Object_id and A.index_id = B.index_id
join sys.sysobjects C on C.id = B.Object_id
where avg_fragmentation_in_percent > 5
and Page_Count > 1000
WHILE exists (SELECT Id FROM #Indices_Fragmentados)
BEGIN
SELECT TOP 1 @Id = Id , @SQLString = Comando
FROM #Indices_Fragmentados
-- Realiza o REORGANIZE OU O REBUILD
EXECUTE sp_executesql @SQLString
DELETE FROM #Indices_Fragmentados
WHERE Id = @Id
END
Script mais complexo:
http://ola.hallengren.com/sql-server-index-and-statistics-maintenance.html
28/01/2014
Fabrício Lima
28/01/2014
Rafael Dantas
Clique aqui para fazer login e interagir na Comunidade :)