Usuário com melhor resposta
Desfragmentar indices

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
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
- Botão Direito na instância do banco de dados -> propriedades
- 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 índicesExemplo:
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- Sugerido como Resposta Fabrizzio CaputoModerator quinta-feira, 17 de março de 2011 20:50
- Marcado como Resposta Daniel Viana terça-feira, 12 de maio de 2015 20:19
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
- Botão Direito na instância do banco de dados -> propriedades
- 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 índicesExemplo:
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- Sugerido como Resposta Fabrizzio CaputoModerator quinta-feira, 17 de março de 2011 20:50
- Marcado como Resposta Daniel Viana terça-feira, 12 de maio de 2015 20:19
-
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- Sugerido como Resposta Luan.Moreno A.k.a SQL.SoulMVP quarta-feira, 25 de maio de 2011 17:49
-
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- Sugerido como Resposta Luan.Moreno A.k.a SQL.SoulMVP sexta-feira, 18 de março de 2011 14:52
-
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 -
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- Sugerido como Resposta Luan.Moreno A.k.a SQL.SoulMVP sexta-feira, 18 de março de 2011 19:51
-
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- Sugerido como Resposta Luan.Moreno A.k.a SQL.SoulMVP sexta-feira, 18 de março de 2011 19:51
-
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 -