Softshop > Banco de Dados: Recompilar Índices SQL Server
Software: SOFTSHOP | Grupo: SOFTSHOP > ANALISE | Prioridade: ALTA
Solução
Requisitos:
Acesso ao SQL Server como usuário com permissões de administrador.
Observações:
Este procedimento pode levar de 1 a 15 minutos, dependendo do tamanho do banco de dados. É necessário ficar com banco de dados sem nenhum acesso.
Procedimento de Recompilação
1. Criar a procedure Recompila_Indices utilizando o script SQL abaixo:
1.1. Abra o SQL Server Management Studio (SSMS).
1.2. Conecte-se ao banco de dados do Softshop.
1.3. Crie uma nova consulta.

1.4. Cole o script SQL abaixo na consulta:
##### CREATE PROCEDURE [dbo].[Recompila_Indices]
##### AS
##### BEGIN
##### SET NOCOUNT ON;
#####
##### DECLARE @PorcentagemMinimaFrag TINYINT = 50;
#####
##### IF OBJECT_ID('tempdb..#IndicesQueSeraoOrganizados') IS NOT NULL
##### DROP TABLE #IndicesQueSeraoOrganizados;
#####
##### CREATE TABLE #IndicesQueSeraoOrganizados (
##### NumeroLinha INT IDENTITY,
##### TableName NVARCHAR(128),
##### Query NVARCHAR(4000)
##### );
#####
##### INSERT INTO #IndicesQueSeraoOrganizados (TableName, Query)
##### SELECT
##### OBJECT_NAME(B.object_id),
##### 'ALTER INDEX ' + QUOTENAME(B.name) + ' ON ' + QUOTENAME(OBJECT_SCHEMA_NAME(B.object_id)) + '.' + QUOTENAME(OBJECT_NAME(B.object_id)) + ' REBUILD;'
##### FROM
##### sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'LIMITED') A
##### INNER JOIN
##### sys.indexes B ON B.object_id = A.object_id AND B.index_id = A.index_id
##### WHERE
##### A.avg_fragmentation_in_percent >= @PorcentagemMinimaFrag
##### AND OBJECT_NAME(B.object_id) NOT LIKE '[_]%'
##### AND A.index_type_desc != 'HEAP'
##### ORDER BY
##### A.avg_fragmentation_in_percent DESC;
#####
##### DECLARE @Comando NVARCHAR(4000),
##### @TableName NVARCHAR(128),
##### @Loop INT;
#####
##### WHILE EXISTS (SELECT 1 FROM #IndicesQueSeraoOrganizados)
##### BEGIN
##### SELECT TOP 1
##### @TableName = TableName,
##### @Comando = Query,
##### @Loop = NumeroLinha
##### FROM
##### #IndicesQueSeraoOrganizados
##### ORDER BY
##### NumeroLinha;
#####
##### PRINT 'Rebuilding index for table: ' + ISNULL(@TableName, 'UNKNOWN');
#####
##### BEGIN TRY
##### EXEC sp_executesql @Comando;
##### PRINT 'Index for table ' + ISNULL(@TableName, 'UNKNOWN') + ' rebuilt successfully.';
##### END TRY
##### BEGIN CATCH
##### PRINT 'Error rebuilding index: ' + ISNULL(@TableName, 'UNKNOWN') + ' - ' + ERROR_MESSAGE();
##### END CATCH;
#####
##### DELETE FROM #IndicesQueSeraoOrganizados WHERE NumeroLinha = @Loop;
##### END
##### END
##### GO
2. Pedir para o cliente fechar o sistema Softshop.
Importante!
Certifique-se de que nenhum usuário esteja acessando o banco de dados durante a recompilação para evitar erros e perda de dados.
3. Reinicie o serviço do SQL Server.
4. Execute a procedure Recompila_Indices no SSMS.

4.1. No SSMS, navegue até Programação > Procedimentos Armazenados.

4.2. Localize a procedure Recompila_Indices e clique com o botão direito para executá-la.


Como Solicitar a Revisão ou Criação de FAQs?
Acesse o fluxo de aprovação FAQ 6729 - Softcom > FAQ: Como se dará o fluxo (Diagrama) de renovação da base de conhecimento? (Clique aqui)
Tags: recompila indice, recompilar indices, sql recompilar