none
Rebuild e Reorganize Indice SQL Server 2008 RRS feed

  • Pergunta

  • Boa tarde, galera.

    Preciso de um auxilio de vocês, seguinte:

    Tenho um banco de dados, onde tenho as tabelas e alguns índices. Porém, fazendo algumas análises percebi que os índices estavam fragmentados.

    Desenvolvi um script que quando a fragmentação estiver entre 5 e 30% ele reorganiza e superior a 30% ele recria. O script funciona. Porém, se eu executar o SELECT para verificar se ainda existe alguma fragmentação, os mesmos índices são retornados, mas, se eu for na ferramenta gráfica, clicar em rebuild ele mostra que aquele índice não está fragmentado.

    1º passo

    --- VERIFICA QUAIS INDICES ESTAO FRAGMENTADOS
    SELECT *
    FROM sys.dm_db_index_physical_stats (DB_ID('[DATABASE]'), OBJECT_ID(''), NULL, NULL , 'DETAILED')
    WHERE index_id > 0
    AND avg_fragmentation_in_percent >= 5

    2º passo

    Recrio ou reorganizo de acordo com a fragmentaçao

    3º passo e o problema

    --- Verifico se depois da rotina ainda existe algum indice fragmentado superior a 5% e retorna os mesmos indices.
    SELECT *
    FROM sys.dm_db_index_physical_stats (DB_ID('[DATABASE]'), OBJECT_ID(']'), NULL, NULL , 'DETAILED')
    WHERE index_id > 0
    AND avg_fragmentation_in_percent >= 5

    4º passo

    Vou diretamente na tabela, indice, clico em rebuild e percebo que ele não está fragmentado

    Alguém consegue me ajudar? Consegui ser claro na dúvida?

    Abs,

    quinta-feira, 9 de abril de 2015 16:46

Respostas

  • Lucas,

    O LIMITED retorna apenas a fragmentação lógica do nó folha do índice.

    O DETAILED lê o nó folha e também todas as páginas de todos os níveis do índice.  Por isso é muito mais demorado.

    O artigo abaixo do Paul Randal é bem bacana.. Dê uma lida nele.

    http://www.sqlskills.com/blogs/paul/inside-sys-dm_db_index_physical_stats/


    Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */

    sexta-feira, 10 de abril de 2015 17:26
  • Lucas,

    Até onde eu sei, quando você clica diretamente no índice -> Rebuild, para retornar a fragmentação, ele faz a mesma consulta que você está usando exceto por um detalhe: você usa "DETAILED" e o SQL faz a consulta com "LIMITED"

    Por isso você deve até ter percebido que clicar diretamente no índice é mais rápido do que esperar o resultado da sua query para esse mesmo índice.

    Tente executar a sua query com a opção "LIMITED" e veja se o resultado bate com a tela de REBUILD.


    Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */

    quinta-feira, 9 de abril de 2015 19:15

Todas as Respostas

  • Lucas,

    Até onde eu sei, quando você clica diretamente no índice -> Rebuild, para retornar a fragmentação, ele faz a mesma consulta que você está usando exceto por um detalhe: você usa "DETAILED" e o SQL faz a consulta com "LIMITED"

    Por isso você deve até ter percebido que clicar diretamente no índice é mais rápido do que esperar o resultado da sua query para esse mesmo índice.

    Tente executar a sua query com a opção "LIMITED" e veja se o resultado bate com a tela de REBUILD.


    Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */

    quinta-feira, 9 de abril de 2015 19:15
  • Lucas,

    Até onde eu sei, quando você clica diretamente no índice -> Rebuild, para retornar a fragmentação, ele faz a mesma consulta que você está usando exceto por um detalhe: você usa "DETAILED" e o SQL faz a consulta com "LIMITED"

    Por isso você deve até ter percebido que clicar diretamente no índice é mais rápido do que esperar o resultado da sua query para esse mesmo índice.

    Tente executar a sua query com a opção "LIMITED" e veja se o resultado bate com a tela de REBUILD.


    Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */

    Mariana,

    Você esta certa, inclusive eu mesmo já ouvi diversos profissionais dizendo que o uso da interface gráfica para este cenário é mais indicado que utilizar o próprio comando de Rebuild.

    Este é mais um mito que existe em relação ao SQL Server.


    Pedro Antonio Galvao Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    sexta-feira, 10 de abril de 2015 00:54
  • Mariana, bom dia.

    Acabei de testar com o  LIMITED e os números batem agora com a tela de rebuild.

    Vocês sabem me dizer o porque quando é executado com o DETAILED esse número muda e não "desfragmenta"?

    sexta-feira, 10 de abril de 2015 13:39
  • Lucas,

    O LIMITED retorna apenas a fragmentação lógica do nó folha do índice.

    O DETAILED lê o nó folha e também todas as páginas de todos os níveis do índice.  Por isso é muito mais demorado.

    O artigo abaixo do Paul Randal é bem bacana.. Dê uma lida nele.

    http://www.sqlskills.com/blogs/paul/inside-sys-dm_db_index_physical_stats/


    Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */

    sexta-feira, 10 de abril de 2015 17:26
  • Obrigado, Mariana.

    Vou ler o artigo (;

    sexta-feira, 10 de abril de 2015 21:37