Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

bimpercursso

Indices SQL Server 2005

Recommended Posts

Ola gente, tenho uma duvida sobre o SQl Server 2005, creio que seja facil, mas nao sou muito da área de DB, ai vai:

 

geralmente toda sexta feira eu tenho que arrumar os indices das tabelas do sistema aqui da empresa (manualmente), eu clico na tabela e depois com o botao direito em INDEXES e seleciono a opção REBUILD ALL, com isso pelo que eu sei ele zera a porcentagem dos indices usados conforme sao usadas as tabelas, mas como sao muitas tabelas acabo perdendo muito tempo com isso, gostaria de saber como deixar fazendno isso automatico, pelo que ja ouvi falar tem coo ser feito automaticamente

 

alguem em alguma sugestao que possa ajudar

 

valeu http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

bimpercursso,

 

beleza?! Eu tenho este script que faz o reindex de todas as tabelas de uma database:

 

set nocount on 

DECLARE @tablename varchar(30) 
DECLARE @tablename_header varchar(75) 

DECLARE tnames_cursor CURSOR FOR SELECT name FROM sysobjects 
WHERE type = 'U' 

OPEN tnames_cursor 

FETCH NEXT FROM tnames_cursor INTO @tablename 

WHILE (@@fetch_status <> -1) 
BEGIN 
IF (@@fetch_status <> -2) 
BEGIN 
SELECT @tablename_header = 'Atualizando ' + RTRIM(UPPER(@tablename)) 
PRINT @tablename_header 
EXEC ('DBCC DBREINDEX ([' + @tablename + '], " ",70)') 
END 
FETCH NEXT FROM tnames_cursor INTO @tablename 
END 

PRINT ' ' 
PRINT ' ' 
SELECT @tablename_header = '************* Não existe mais tabelas *************' 
PRINT @tablename_header 

PRINT ' ' 
PRINT 'Atualização dos Indices - FIM' 
DEALLOCATE tnames_cursor 
go 

set nocount off

Ve se isso te ajuda

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiramente bom dia!

Peço licença para uma pergunta neste forum. Sou usuario iniciante porem não tenho participado das dicusões, mas gostaria muito....

Se puderem me ajudar, tenho algumas duvida:

Neste exemplo enviado por jus2ka , quando executo o script percebo duas coisas :

1) nem todos os indexes são afetados, por exemplo indexes declarados como Unique não entrou;

2) o tamanho do banco de dados aumentou. E ao executar o shrink database seu tamanho acaba ficando menor do que o inicial/backup.

 

Por que isso acontece?

São apagados informações no banco?

Posso ter problema com isso?

 

Se puderem me ajudar, ficaria muito agradecido.

 

Antecipadamente,

Obrigado!

Cido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala Cido, beleza?

 

Qq discussao eh valida e bem vinda... serve para aprendizado de ambos os lados ;)

 

Bom, vamos lá,

 

indices UNIQUE nao sao afetados, pq por default já são "clustered".

No SQL2000 isso nao ocorre, como o caso dele era 2005, postei este codigo. Para que estes indices tambem sejam afetados, caso for o caso, tem que mudar a estrutura deste codigo, na linha DBCC DBREINDEX inserindo o nome do indice chave.

 

O tamanho do db aumenta sim, pq ehuma transacao que tem uma carga excessiva de verificacao, entao eh normal ele crescer, mas nada muito assustador, o que nao pode ocorrer, eh aumentar mais de 15% do tamanho, se isso ocorrer, pode ser necessario executar o shrink file ao inves de shrink database. Com isso o LDF (log) fica menor e mais rapido para leitura e escrita

 

Espero que tenha sanado as duvidas, se nao, pode postar ;)

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu, mas um duvida ainda.

Por que o banco acaba ficando menor do que inicialmente?

Quando se faz um backup do banco, ele faz uma copia do banco!

Ai eu fiz um skrink database e ficou menor, pois havia pre-alocado espaça em seu tamanho. beleza, ai executei o script, o banco aumentou, e entao novamente fiz outro skrink ai o tamanha ficou menor do q o inicial?

 

Esta correto?

 

Cido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos lá :P

Quando se faz um backup do banco, ele faz uma copia do banco!

O bkp eh uma copia fiel do db nakele momento, se sua aplicacao for on line ou tiver usuario fazendo alguma transacao ainda, pode ser que sua copia nao seja ujma copia fiel do db.

Algumas empresas, matam todos os processos do db para o bkp (tenho clientes que sao assim) para ter uma copia realmente fiel do db.

 

Ai eu fiz um skrink database e ficou menor, pois havia pre-alocado espaça em seu tamanho. beleza, ai executei o script, o banco aumentou, e entao novamente fiz outro skrink ai o tamanha ficou menor do q o inicial?

Juro que nunca fiz este teste, mas pode ser que qdo você executa pela segunda vez o skrink, ele tenha "matado" algumas transacoes pendentes no log, eh uma suposicao. Vou tentar montar um ambiente de teste com o SQL2005 para testar :P

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.