Usuário com melhor resposta
indices

Pergunta
-
Respostas
-
Realmente, foi um pouco falta de atenção, realmente o Express não tem plano de manutenção, teria de ser via t-sql mesmo e agendar via Scheduler do Windows, vê se isso te ajuda irmão, esse script ele recria os índices e recompila suas procedures.
if exists(select 1 from sysobjects s where s.type = 'P' and s.name = 'up_otimiza_bd') drop procedure up_otimiza_bd go create procedure up_otimiza_bd as Print '--------------------------------------------------------------' Print 'Esta procedure deve ser executada REGULARMENTE.' Print 'Isto deixara a performance do banco de dados otimizada!' Print '--------------------------------------------------------------' declare @banco varchar(255) declare @tabela varchar(255) declare @versao int select @banco = rtrim(db_name()) Select @versao = (select version from master..sysdatabases S Where s.name = db_name()) Print '' Print '-----------------------------------------------------------' Print 'Desfragmentando/Reindexando as Tabelas do Banco de Dados!' Print '-----------------------------------------------------------' set @tabela = '' If @versao = 539 Begin while 1=1 begin select @tabela = Min(name) from sysobjects where type = 'U' and name > @tabela if @tabela is null break Print '' print 'Reindexando ' + @tabela DBCC dbreindex(@tabela, '', 80 ) Print @tabela + ' Reindexada com Sucesso!' end End If @versao = 515 Begin while 1=1 begin select @tabela = Min(name) from sysobjects where type = 'U' and name > @tabela if @tabela is null break Print '' print 'Reindexando ' + @tabela DBCC dbreindex(@tabela, '', 70 ) Print @tabela + ' Reindexada com Sucesso!' end End Print '' Print '---------------------------------------' Print 'Atualizando Estatistica dos Indices!' Print '---------------------------------------' exec sp_updatestats Print '' Print '-----------------------------------------------' Print 'Recompilando as Procedures do Banco de Dados!' Print '-----------------------------------------------' declare @Proc varchar(255) declare @Exec varchar(255) set @Proc = '' while 1=1 begin select @Proc=min(name) from sysobjects where type = 'P' and name > @Proc if @Proc is null break Print '' Print 'Recompilando a procedure ' + @Proc set @exec = 'exec sp_recompile ' + rtrim(ltrim(@Proc)) execute (@exec) Print @Proc + ' Recompilada com Sucesso!' end Print '' Print '----------------------------------' Print 'Otimizacao do Banco de Dados Concluida!' Print '----------------------------------' ----exec up_otimiza_bd
Para setar a váriavel @versão você precisa verificar a versão do seu banco na sysdatabase (select version from master..sysdatabases) após criar a procedure efetue o exec up_otimiza_bd
[]'s
- Editado Fernando Maradei terça-feira, 4 de setembro de 2012 19:14
- Marcado como Resposta cesarmene terça-feira, 4 de setembro de 2012 19:17
-
Boa Noite,
Não acho que o uso de comandos DBCC DBREINDEX sejam indicados. Eles não permitem por exemplo o uso da reindexação ONLINE e enquanto estiverem rodando irão impor bloqueios nas tabelas utilizadas. Sugiro dar uma olhada no script abaixo (retirado do Books OnLine)
USE AdventureWorks2008R2;
GO
DECLARE tables_cursor CURSOR
FOR
SELECT s.name, t.name
FROM sys.objects AS t
JOIN sys.schemas AS s ON s.schema_id = t.schema_id
WHERE t.type = 'U';
OPEN tables_cursor;
DECLARE @schemaname sysname;
DECLARE @tablename sysname;
FETCH NEXT FROM tables_cursor INTO @schemaname, @tablename;
WHILE (@@FETCH_STATUS <> -1)
BEGIN;
EXECUTE ('ALTER INDEX ALL ON ' + @schemaname + '.' + @tablename + ' REBUILD;');
FETCH NEXT FROM tables_cursor INTO @schemaname, @tablename;
END;
PRINT 'The indexes on all tables have been rebuilt.';
CLOSE tables_cursor;
DEALLOCATE tables_cursor;
GOOpcionalmente use os parâmetros de REBUILD ONLINE se desejar
[ ]s,
Gustavo Maia Aguiar
Blog: http://gustavomaiaaguiar.wordpress.com
Vídeos:http://www.youtube.com/user/gmasqlClassifique as respostas. O seu feedback é imprescindível
- Sugerido como Resposta Gustavo Maia Aguiar quarta-feira, 5 de setembro de 2012 00:48
- Marcado como Resposta cesarmene quarta-feira, 5 de setembro de 2012 11:00
Todas as Respostas
-
-
-
Realmente, foi um pouco falta de atenção, realmente o Express não tem plano de manutenção, teria de ser via t-sql mesmo e agendar via Scheduler do Windows, vê se isso te ajuda irmão, esse script ele recria os índices e recompila suas procedures.
if exists(select 1 from sysobjects s where s.type = 'P' and s.name = 'up_otimiza_bd') drop procedure up_otimiza_bd go create procedure up_otimiza_bd as Print '--------------------------------------------------------------' Print 'Esta procedure deve ser executada REGULARMENTE.' Print 'Isto deixara a performance do banco de dados otimizada!' Print '--------------------------------------------------------------' declare @banco varchar(255) declare @tabela varchar(255) declare @versao int select @banco = rtrim(db_name()) Select @versao = (select version from master..sysdatabases S Where s.name = db_name()) Print '' Print '-----------------------------------------------------------' Print 'Desfragmentando/Reindexando as Tabelas do Banco de Dados!' Print '-----------------------------------------------------------' set @tabela = '' If @versao = 539 Begin while 1=1 begin select @tabela = Min(name) from sysobjects where type = 'U' and name > @tabela if @tabela is null break Print '' print 'Reindexando ' + @tabela DBCC dbreindex(@tabela, '', 80 ) Print @tabela + ' Reindexada com Sucesso!' end End If @versao = 515 Begin while 1=1 begin select @tabela = Min(name) from sysobjects where type = 'U' and name > @tabela if @tabela is null break Print '' print 'Reindexando ' + @tabela DBCC dbreindex(@tabela, '', 70 ) Print @tabela + ' Reindexada com Sucesso!' end End Print '' Print '---------------------------------------' Print 'Atualizando Estatistica dos Indices!' Print '---------------------------------------' exec sp_updatestats Print '' Print '-----------------------------------------------' Print 'Recompilando as Procedures do Banco de Dados!' Print '-----------------------------------------------' declare @Proc varchar(255) declare @Exec varchar(255) set @Proc = '' while 1=1 begin select @Proc=min(name) from sysobjects where type = 'P' and name > @Proc if @Proc is null break Print '' Print 'Recompilando a procedure ' + @Proc set @exec = 'exec sp_recompile ' + rtrim(ltrim(@Proc)) execute (@exec) Print @Proc + ' Recompilada com Sucesso!' end Print '' Print '----------------------------------' Print 'Otimizacao do Banco de Dados Concluida!' Print '----------------------------------' ----exec up_otimiza_bd
Para setar a váriavel @versão você precisa verificar a versão do seu banco na sysdatabase (select version from master..sysdatabases) após criar a procedure efetue o exec up_otimiza_bd
[]'s
- Editado Fernando Maradei terça-feira, 4 de setembro de 2012 19:14
- Marcado como Resposta cesarmene terça-feira, 4 de setembro de 2012 19:17
-
-
Boa Noite,
Não acho que o uso de comandos DBCC DBREINDEX sejam indicados. Eles não permitem por exemplo o uso da reindexação ONLINE e enquanto estiverem rodando irão impor bloqueios nas tabelas utilizadas. Sugiro dar uma olhada no script abaixo (retirado do Books OnLine)
USE AdventureWorks2008R2;
GO
DECLARE tables_cursor CURSOR
FOR
SELECT s.name, t.name
FROM sys.objects AS t
JOIN sys.schemas AS s ON s.schema_id = t.schema_id
WHERE t.type = 'U';
OPEN tables_cursor;
DECLARE @schemaname sysname;
DECLARE @tablename sysname;
FETCH NEXT FROM tables_cursor INTO @schemaname, @tablename;
WHILE (@@FETCH_STATUS <> -1)
BEGIN;
EXECUTE ('ALTER INDEX ALL ON ' + @schemaname + '.' + @tablename + ' REBUILD;');
FETCH NEXT FROM tables_cursor INTO @schemaname, @tablename;
END;
PRINT 'The indexes on all tables have been rebuilt.';
CLOSE tables_cursor;
DEALLOCATE tables_cursor;
GOOpcionalmente use os parâmetros de REBUILD ONLINE se desejar
[ ]s,
Gustavo Maia Aguiar
Blog: http://gustavomaiaaguiar.wordpress.com
Vídeos:http://www.youtube.com/user/gmasqlClassifique as respostas. O seu feedback é imprescindível
- Sugerido como Resposta Gustavo Maia Aguiar quarta-feira, 5 de setembro de 2012 00:48
- Marcado como Resposta cesarmene quarta-feira, 5 de setembro de 2012 11:00