none
Desfragmentar indices RRS feed

  • Pergunta

  • Estou passando pro um problema de lentidão que tem me tirado o sono. As consultas e insert estão demorando muito. Já tentei desfragementar os indices porém não surgiu resultado.

     

    Fiz uma consulta nos indeces usando a dm index_physical_stats, eque me apresentou:

     

    Nome ---------|------ AVG_fragmentation_in_percent

     

     

     

    NULL ---|--90

    NULL ---|--88,88

    DC_RequisicaoOnLine ----|--- 83,33

    XIF4EncomendaCliente ---|--83,33

    DC_DocumentoFiscal -----|----- 80

    NULL ---|--80

    CI_Acesso ---|--80

    NULL -----|---- 77,778

    XIF307ConfiguracaoDocumentos -----|----- 75

    CI_Pertinencia ---|--75

    DC_Acesso -----|----- 75

    DA_Acesso ---|--75

    NULL ---|--75

    PK__TelefoneFunciona__52EF04EC ---|--75

    XIF511Fornecedor ---|--75

    DC_Fornecedor ---|--75

    DA_Fornecedor ---|--75

     

     

    ....

    Ou seja, muito fragmentado. Já usei ALTER INDEX ALL com fillfactor 80, INDEXDEFRAG, DBCC DBREINDEX. E quando refaço o select na dm, a fragmentação continua, não muda nada, ou seja, todos estes comandos não fizeram nada...

     

    Alguém tem alguma idéia qual é o problema?

     

     


    dvo
    quinta-feira, 17 de março de 2011 19:43

Respostas

  • Daniel Viana, boa tarde!

     

    Primeiramente, porque utilizar 80% de FILLFACTOR?

     

    Você tem que realizar um REBUILD dos índices, mais antes verifique o seguinte:

     

    Abra o SSMS e vá em

     

    1. Botão Direito na instância do banco de dados -> propriedades
    2. Vá na aba, Database Settings e veja DEFAULT INDEX FILL FACTOR - coloque para 0

    Isso porque se estiver com 5 ou 10, o SQL Server somente irá preencher 10% da página dos dados.

    Abs


    Realizando rebuild dos índices
    Exemplo:

    USE AdventureWorks2008R2;
    GO
    ALTER INDEX PK_Employee_BusinessEntityID ON HumanResources.Employee
    REBUILD;
    GO

     


    Luan.Moreno MCP || MTA ||MCTS SQL Server 2005 Blog: http://luanmorenodba.wordpress.com Twitter: @luansql Classifique as respostas. O seu feedback é imprescindível
    quinta-feira, 17 de março de 2011 20:40

Todas as Respostas

  • Daniel Viana, boa tarde!

     

    Primeiramente, porque utilizar 80% de FILLFACTOR?

     

    Você tem que realizar um REBUILD dos índices, mais antes verifique o seguinte:

     

    Abra o SSMS e vá em

     

    1. Botão Direito na instância do banco de dados -> propriedades
    2. Vá na aba, Database Settings e veja DEFAULT INDEX FILL FACTOR - coloque para 0

    Isso porque se estiver com 5 ou 10, o SQL Server somente irá preencher 10% da página dos dados.

    Abs


    Realizando rebuild dos índices
    Exemplo:

    USE AdventureWorks2008R2;
    GO
    ALTER INDEX PK_Employee_BusinessEntityID ON HumanResources.Employee
    REBUILD;
    GO

     


    Luan.Moreno MCP || MTA ||MCTS SQL Server 2005 Blog: http://luanmorenodba.wordpress.com Twitter: @luansql Classifique as respostas. O seu feedback é imprescindível
    quinta-feira, 17 de março de 2011 20:40
  • Luan, Bom dia!

     

    Obrigado pela resposta.

     

    Usei o fill factor 80% porque neste banco há muitas gravações, pensei em deixar 20% das páginas livres para novas gravações.

     

    Dei uma olhada no fill factor do banco e já estava como 0.

     

    Também já usei o alter index com o Rebuild. O que não entendo é porque rodando todos estes script, o incide continua fragmentado.


    dvo
    sexta-feira, 18 de março de 2011 11:32
  • Bom dia Daniel,

    Qual é o volume dessas tabelas? As vezes, por serem objetos pequenos, algumas dessas tabelas utilizam a mesma extensão, ou seja,  extensões mistas. Por esse motivo, a fragmentação de um indice pequeno pode não ser reduzida após um rebuild ou um reorganize.

     

    sobre páginas e extensões: http://msdn.microsoft.com/pt-br/library/ms190969.aspx

    att.
    Rafael Melo

     

    sexta-feira, 18 de março de 2011 11:47
  • Daniel, bom dia!

     

    Concordo com o Rafael, dependendo do tamanho da tabela, essa desfragmentação pode não acontecer!


    Att,


    Luan.Moreno MCP || MTA ||MCTS SQL Server 2005 Blog: http://luanmorenodba.wordpress.com Twitter: @luansql Classifique as respostas. O seu feedback é imprescindível
    sexta-feira, 18 de março de 2011 14:53
  • Daniel,

    fillfactor é um otimo recursos a ser modificado, porem é necessario teste. O que para meu ambiente 80% é otimo, para o seu pode ser pessimo. Então teste...

    Fillfactor controla ou tenta reduzir o numero de pageslipts, o que causa queda de performance.

    Vc olhou por indices duplicados?

    Qual o tamanho de seus indices?

    Nos fala um pouco mais sobre seu ambiente.

    Existem varios motivos motivos para "lentidões" tanto em select como em insert...

     

    []'s!

     

     


    http://www.diaadiasql.com.br
    sexta-feira, 18 de março de 2011 15:01
  • Observação:

    Se a tabela possuir identity em chaves primárias o ideal não é utilizar fillfactor, pois sempre serão inseridos no final do ultimo arquivo...


    Alex Souza http://pessoalex.wordpress.com
    sexta-feira, 18 de março de 2011 18:08
  • Renato, creio o que está relacionado com o tamanho da tabela.

     

    Fiz outras analises, e vi que havia uma consulta que estava consumindo muito o disco. Depois que vi que esta consulta não tinha indice. Depois que criei o indice a litura caiu dastricamente.

     

    Obrigado, pessoal pelas respostas.


    dvo
    sexta-feira, 18 de março de 2011 19:37
  • Então foi solucionado ?
    Luiz Henrique Gomes Porto | MCTS - Implementation and Maintenance SQL Server 2008 | MCITP Database Administrator SQL Server 2008 | MCTS - Business Intelligence Development and Maintenance SQL Server 2008
    quarta-feira, 11 de maio de 2011 18:16