SlideShare une entreprise Scribd logo
1  sur  20
Manutenção de índices: o guia definitivo
Ivan Lima                            Luciano Caixeta Moreira – {Luti}
“PASS Supporter - SQLServerDF”   PASS Chapter Leader - SQLServerDF
http://ivanglima.com/                     http://luticm.blogspot.com
@sqlinsane                                                   @luticm
http://www.srnimbus.com.br              http://www.srnimbus.com.br
Agenda

Conhecimento geral de índices
Fill factor padrão de x%
Shrink após um rebuild
Limites de fragmentação 10% e 30%
Fragmentação de ramo (da B+tree)
Compressão de índice não-cluster
O guia definitivo




2
Conhecimento geral de índices

   Índices = B+tree
   Cluster e não-cluster
   1 cluster por tabela - Nível folha contém dados
   N índices cluster - Nível folha contém referência para registro
       RID (heap) ou KEY (clustered)
       Composto, INCLUDE, Filtered
   Ausência de cluster = heap
   SYS.DM_DB_*
   Sys.dm_db_index_physical_stats (DBCC SHOW_CONTIG)
   Rebuild vs. Reorganize
   Tipos de fragmentação



3
Fill factor padrão de x%
 Qual o fill factor padrão da sua instância?
 Qual o fill factor recomendado?
       90%? 80%? 70%? 50%?
 Somente é válido para índices que se fragmentam
 Deixa espaço em branco na página = impacto no data cache!
 Fill factor = fator de preenchimento, não quanto você deixa
 vazio na página de dados!
       AKA => Fill factor de 1% é “um pouco” ruim...!
 Vamos fazer cálculos...
       Índice com 50GB acumulado em 2 anos de sistema em produção
       Rebuild semanal
       Fillfactor de 80% = 10GB de inserção em uma semana?!!!


4
DEMO
Fill factor padrão de 80%




5
Shrink após o rebuild
 Rebuild cria um novo índice em outro local do arquivo
 Meu banco de 1,6TB cresceu 200GB depois dos rebuilds
       Normal, isso é o esperado quando se tem objetos grandes
 O log de transação também cresce muito!
       Mas eu estou com Recovery Model Simple?
       Sim meu caro, mas é uma transação então o minLSN prende seus VLFs!
 Mas eu tenho espaço livre, o SSMS me mostra! O que fazer?
       Shrink do arquivo de log (não funciona com recovery model full?)
       Shrink do arquivo de dados
       NNNNNNÃÃÃÃÃÃÃÃÃÃOOOOOOO
 Problema de espaço não se resolve com “jeitinho”



6
DEMO
Rebuild + shrink




7
Limites de fragmentação 10% e 30%
   Limites de reorganize vs. rebuild
   É a recomendação padrão que utilizamos e vemos por aí?
   Qual fragmentação? Lógica? Física? Interna?
   É uma boa recomendação?
       Em geral sim!
 Mas... E se o seu índice não fragmenta mais de 30% entre a
  frequência de entrada do reorganize?
       Rebuild NUNCA é executado!
 Você pode sobreviver com isso, talvez sim, mas com
  ressalvas...
       Index interleaving e fragmentação física
       Aplicar o fill factor (baixar % uso da página)
       Estatísticas

8
Fragmentação de ramo (da B+tree)
 Caso os seus índices sejam muito grandes, além do custo de
 manutenção o que pode acontecer?
 Uma fragmentação importante passar despercebida
 Como? Fragmentando um ramo da sua árvore, aquele ramo
 que você mais utiliza
 Resultado: DMV não te mostra um ramo, mas sim de toda a
 árvore.
       Pode causar impacto similar ao fill factor de 80%, só que de 50%
 Artigo escrito em Fev/2012: No significant fragmentation? Look
 closer
       http://www.simple-talk.com/sql/database-administration/no-significant-
        fragmentation-look-closer%E2%80%A6/



9
DEMO
Fragmentação de ramo




10
Compressão de índice não-cluster
 Índices cluster usualmente são bons candidatos para uma
 compressão de registro (muitos campos tamanho fixo, null, etc.)
 E os índices não-cluster, em especial tipos VARCHAR(x)?
        Maria da Silva Silva, Maria da Silva Silvania, Maria da Silva Souza
        Compressão de prefixo vai ficar interssante.
 Considerar o impacto de CPU!
 Qual o ganho potencial?
 Mais registros por página => melhor eficiência do data cache
 => menor quantidade de I/O => melhor desempenho
 Potencialmente ganho significativo na janela de manutenção
 dos seus índices (I/O bound)



11
DEMO
Compressão de índice não-cluster




12
O guia definitivo

 Se no seu ambiente a janela de manutenção é de 10 horas e o
 tempo para rebuild completo é de 3 horas...
 REBUILD ALL!!!
 Script auxiliares:
        http://ola.hallengren.com/
        http://sqlfool.com/2011/06/index-defrag-script-v4-1/
        Diversas opções, como por exemplo, limitar tempo da janela de manutenção
 Scripts do seu ambiente
 SQL Server Management Studio
        Pode dar mais trabalho
        Pode levar a erros ou problemas quando seus bancos de dados crescerem
 Tabelas com menos de 10.000 páginas (~ 80MB)
        Rebuild com a maior frequência (diário)



13
O guia definitivo

 Reorganize sempre
        Respeite a sua janela de manutenção
        É leve mas tem impacto. Caso de jobs simulâneos, ISCSI = timeout
 Índices grandes (de verdade)
        Particionar índices
        Campo data? Últimos 6 meses, 1 ano e ½ e restante
        RAIDs diferentes (melhor desempenho para o hot spot)
        Rebuild de partição
 Índices muito utilizados e grandes
        Analisar fragmentação de ramos (índices filtrados ajudam)
        Considere particionamento
 Pode trabalhar com 10% e 30%
        Force o rebuild com certa regularidade
        Como saber se houve reorganize ou rebuild de um índice?
        Alterar script da Michele para guardar comandos

14
O guia definitivo
 Considere a ordem de manutenção dos índices
        Casos onde o cliente limita a janela e faz diariamente reorganize dos
         mesmos índices que fragmentam mais de 10% em um dia
 Solução não é um script genérico
        São vários script menores para controlar objetos, ordem de execução,
         dias e horários, etc.
 Lembre-se da atualização de estatísticas
        Reorganize não o faz
        Depois de um rebuild completo ou do índice, não atualize a estatística
         dos índices (UPDATE STATISTICS ... COLUMNS)
 Cuidado com sys.dm_db_index_physical_stats
        Principalmente com o DETAILED
        Guarde os registros do resultado quando consultar a DMV (No I/O
         waste!)
15
O guia definitivo

 Fill factor específico para cada índice
        Basta executar uma vez com o fill factor que deseja, na próxima
         execução se não especificado o SQL Server usa o mais recente
        Cuidado com geração de código que muda o fill factor
        Leve em conta o percentual de atualização e novos dados
        Se não sabe o fill factor e não tem ideia das características do objeto,
         deixe em 95% e monitore
 Monitoramento constante
        Os padrões da sua aplicação não mudam com tanta frequência
        Mas novos builds e sistemas novos podem trazer comportamentos
         inesperados




16
Mais outros...

 Limitar paralelismo
        MAXDOP = 1
        Janela mais longa, porém impacto de CPU menor (online)
 Sort in TempDB
      Trade-off de overhead com resultados intermediários do sort
 ONLINE
        Impacto na tempdb (version store)
        Limitações: LOB (SQL 2012 NCL LOB included), partição, XML, spatial
        Online não é 100% online
        Início: Shared lock no objeto de origem
        Fim: Shared lock no objeto de destino e SCH-M lock na origem



17
De acordo com o guia do DBA das
galáxias...
 Oh, excelentíssima e maior potência intelectual da galáxia, qual é o
 fill factor padrão que devo adotar para TODAS as minhas instâncias
 SQL Server?

             (384833 anos processando a resposta e....)




                       42!
                                                          Piadinha, ok?

18
Questions?
Ivan Lima                             Luciano Caixeta Moreira – {Luti}
“PASS Supporter - SQLServerDF ”   PASS Chapter Leader - SQLServerDF
http://ivanglima.com/                      http://luticm.blogspot.com
@sqlinsane                                                    @luticm
Thank You for Attending

Contenu connexe

Tendances

Novidades do Sql Server 2016
Novidades do Sql Server 2016Novidades do Sql Server 2016
Novidades do Sql Server 2016Roberto Fonseca
 
Programação em Banco de Dados - Aula 16/08/2018
Programação em Banco de Dados - Aula 16/08/2018Programação em Banco de Dados - Aula 16/08/2018
Programação em Banco de Dados - Aula 16/08/2018Elaine Cecília Gatto
 
SQL Server ES - Escrevendo queries rápidas (Performance/Query Tuning)
SQL Server ES - Escrevendo queries rápidas (Performance/Query Tuning)SQL Server ES - Escrevendo queries rápidas (Performance/Query Tuning)
SQL Server ES - Escrevendo queries rápidas (Performance/Query Tuning)Dirceu Resende
 
24H PASS PT-BR 10 Dicas para escrever códigos t-sql melhores
24H PASS PT-BR 10 Dicas para escrever códigos t-sql melhores24H PASS PT-BR 10 Dicas para escrever códigos t-sql melhores
24H PASS PT-BR 10 Dicas para escrever códigos t-sql melhoresRodrigo Crespi
 
Introdução aos sistemas distribuídos on-line para processamento de fluxos de ...
Introdução aos sistemas distribuídos on-line para processamento de fluxos de ...Introdução aos sistemas distribuídos on-line para processamento de fluxos de ...
Introdução aos sistemas distribuídos on-line para processamento de fluxos de ...André Leon S. Gradvohl
 
Principais processos de criação de um Banco de Dados e comuns erros de aplica...
Principais processos de criação de um Banco de Dados e comuns erros de aplica...Principais processos de criação de um Banco de Dados e comuns erros de aplica...
Principais processos de criação de um Banco de Dados e comuns erros de aplica...Perla Coutinho Barbosa
 
Refactoring Databases - parte 1
Refactoring Databases - parte 1Refactoring Databases - parte 1
Refactoring Databases - parte 1Ismael
 
Memória virtual 2
Memória virtual 2Memória virtual 2
Memória virtual 2jackeline456
 
Banco de Dados I - Aula 09 - Normalização de Dados
Banco de Dados I - Aula 09 - Normalização de DadosBanco de Dados I - Aula 09 - Normalização de Dados
Banco de Dados I - Aula 09 - Normalização de DadosLeinylson Fontinele
 
Banco de Dados - MySQL Basico
Banco de Dados - MySQL BasicoBanco de Dados - MySQL Basico
Banco de Dados - MySQL BasicoRangel Javier
 
Bad Smells em Bancos de Dados
Bad Smells em Bancos de DadosBad Smells em Bancos de Dados
Bad Smells em Bancos de DadosFabrízio Mello
 
Mais performance com o MySQL 5.6
Mais performance com o MySQL 5.6Mais performance com o MySQL 5.6
Mais performance com o MySQL 5.6MySQL Brasil
 
Aula 08 - Introdução ao banco de dados MySQL - Programação Web
Aula 08 - Introdução ao banco de dados MySQL - Programação WebAula 08 - Introdução ao banco de dados MySQL - Programação Web
Aula 08 - Introdução ao banco de dados MySQL - Programação WebDalton Martins
 
TechEd 2011: Raio-X do SQL Server: Arquitetura Interna do Gerenciador de Ban...
TechEd 2011: Raio-X do SQL Server: Arquitetura Interna do Gerenciador de Ban...TechEd 2011: Raio-X do SQL Server: Arquitetura Interna do Gerenciador de Ban...
TechEd 2011: Raio-X do SQL Server: Arquitetura Interna do Gerenciador de Ban...Fabrício Catae
 
Banco de Dados I - Aula 11 - Linguagem de Consulta SQL (Comandos DDL)
Banco de Dados I - Aula 11 - Linguagem de Consulta SQL (Comandos DDL)Banco de Dados I - Aula 11 - Linguagem de Consulta SQL (Comandos DDL)
Banco de Dados I - Aula 11 - Linguagem de Consulta SQL (Comandos DDL)Leinylson Fontinele
 
TechEd 2010: SQL Server com Foco em Diagnóstico de Desempenho
TechEd 2010: SQL Server com Foco em Diagnóstico de DesempenhoTechEd 2010: SQL Server com Foco em Diagnóstico de Desempenho
TechEd 2010: SQL Server com Foco em Diagnóstico de DesempenhoFabrício Catae
 

Tendances (20)

Novidades do Sql Server 2016
Novidades do Sql Server 2016Novidades do Sql Server 2016
Novidades do Sql Server 2016
 
Otimização MySQL
Otimização MySQLOtimização MySQL
Otimização MySQL
 
Programação em Banco de Dados - Aula 16/08/2018
Programação em Banco de Dados - Aula 16/08/2018Programação em Banco de Dados - Aula 16/08/2018
Programação em Banco de Dados - Aula 16/08/2018
 
SQL Server ES - Escrevendo queries rápidas (Performance/Query Tuning)
SQL Server ES - Escrevendo queries rápidas (Performance/Query Tuning)SQL Server ES - Escrevendo queries rápidas (Performance/Query Tuning)
SQL Server ES - Escrevendo queries rápidas (Performance/Query Tuning)
 
24H PASS PT-BR 10 Dicas para escrever códigos t-sql melhores
24H PASS PT-BR 10 Dicas para escrever códigos t-sql melhores24H PASS PT-BR 10 Dicas para escrever códigos t-sql melhores
24H PASS PT-BR 10 Dicas para escrever códigos t-sql melhores
 
Aula10 sql-ddl
Aula10 sql-ddlAula10 sql-ddl
Aula10 sql-ddl
 
Introdução aos sistemas distribuídos on-line para processamento de fluxos de ...
Introdução aos sistemas distribuídos on-line para processamento de fluxos de ...Introdução aos sistemas distribuídos on-line para processamento de fluxos de ...
Introdução aos sistemas distribuídos on-line para processamento de fluxos de ...
 
Principais processos de criação de um Banco de Dados e comuns erros de aplica...
Principais processos de criação de um Banco de Dados e comuns erros de aplica...Principais processos de criação de um Banco de Dados e comuns erros de aplica...
Principais processos de criação de um Banco de Dados e comuns erros de aplica...
 
Refactoring Databases - parte 1
Refactoring Databases - parte 1Refactoring Databases - parte 1
Refactoring Databases - parte 1
 
Memória virtual 2
Memória virtual 2Memória virtual 2
Memória virtual 2
 
Bancos de dados NoSQL: uma visão geral
Bancos de dados NoSQL: uma visão geralBancos de dados NoSQL: uma visão geral
Bancos de dados NoSQL: uma visão geral
 
Banco de Dados I - Aula 09 - Normalização de Dados
Banco de Dados I - Aula 09 - Normalização de DadosBanco de Dados I - Aula 09 - Normalização de Dados
Banco de Dados I - Aula 09 - Normalização de Dados
 
Banco de Dados - MySQL Basico
Banco de Dados - MySQL BasicoBanco de Dados - MySQL Basico
Banco de Dados - MySQL Basico
 
Tipos de dados em MySQL
Tipos de dados em MySQLTipos de dados em MySQL
Tipos de dados em MySQL
 
Bad Smells em Bancos de Dados
Bad Smells em Bancos de DadosBad Smells em Bancos de Dados
Bad Smells em Bancos de Dados
 
Mais performance com o MySQL 5.6
Mais performance com o MySQL 5.6Mais performance com o MySQL 5.6
Mais performance com o MySQL 5.6
 
Aula 08 - Introdução ao banco de dados MySQL - Programação Web
Aula 08 - Introdução ao banco de dados MySQL - Programação WebAula 08 - Introdução ao banco de dados MySQL - Programação Web
Aula 08 - Introdução ao banco de dados MySQL - Programação Web
 
TechEd 2011: Raio-X do SQL Server: Arquitetura Interna do Gerenciador de Ban...
TechEd 2011: Raio-X do SQL Server: Arquitetura Interna do Gerenciador de Ban...TechEd 2011: Raio-X do SQL Server: Arquitetura Interna do Gerenciador de Ban...
TechEd 2011: Raio-X do SQL Server: Arquitetura Interna do Gerenciador de Ban...
 
Banco de Dados I - Aula 11 - Linguagem de Consulta SQL (Comandos DDL)
Banco de Dados I - Aula 11 - Linguagem de Consulta SQL (Comandos DDL)Banco de Dados I - Aula 11 - Linguagem de Consulta SQL (Comandos DDL)
Banco de Dados I - Aula 11 - Linguagem de Consulta SQL (Comandos DDL)
 
TechEd 2010: SQL Server com Foco em Diagnóstico de Desempenho
TechEd 2010: SQL Server com Foco em Diagnóstico de DesempenhoTechEd 2010: SQL Server com Foco em Diagnóstico de Desempenho
TechEd 2010: SQL Server com Foco em Diagnóstico de Desempenho
 

En vedette

Case of maskhadova and others v. russia
Case of maskhadova and others v. russiaCase of maskhadova and others v. russia
Case of maskhadova and others v. russiaElena Yushchenko
 
Doklad analiza ugolovnogo_dela_khodorkovskogo
Doklad analiza ugolovnogo_dela_khodorkovskogoDoklad analiza ugolovnogo_dela_khodorkovskogo
Doklad analiza ugolovnogo_dela_khodorkovskogoElena Yushchenko
 
О чем говорили Горбачев и Тэтчер 16 декабря 1984 года
О чем говорили Горбачев и Тэтчер 16 декабря 1984 годаО чем говорили Горбачев и Тэтчер 16 декабря 1984 года
О чем говорили Горбачев и Тэтчер 16 декабря 1984 годаElena Yushchenko
 

En vedette (7)

Case of maskhadova and others v. russia
Case of maskhadova and others v. russiaCase of maskhadova and others v. russia
Case of maskhadova and others v. russia
 
Vedomosti 17 06-2013
Vedomosti 17 06-2013Vedomosti 17 06-2013
Vedomosti 17 06-2013
 
Ksrf decision123427
Ksrf decision123427Ksrf decision123427
Ksrf decision123427
 
41d44ac07ad86717c5f9
41d44ac07ad86717c5f941d44ac07ad86717c5f9
41d44ac07ad86717c5f9
 
Doklad analiza ugolovnogo_dela_khodorkovskogo
Doklad analiza ugolovnogo_dela_khodorkovskogoDoklad analiza ugolovnogo_dela_khodorkovskogo
Doklad analiza ugolovnogo_dela_khodorkovskogo
 
правит во
правит воправит во
правит во
 
О чем говорили Горбачев и Тэтчер 16 декабря 1984 года
О чем говорили Горбачев и Тэтчер 16 декабря 1984 годаО чем говорили Горбачев и Тэтчер 16 декабря 1984 года
О чем говорили Горбачев и Тэтчер 16 декабря 1984 года
 

Similaire à MANUTENÇÃO DE ÍNDICES: O GUIA DEFINITIVO

Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...
Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...
Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...Taller Negócio Digitais
 
Database Class - Pontos de defasagem e questões de brinde.
Database Class - Pontos de defasagem e questões de brinde.Database Class - Pontos de defasagem e questões de brinde.
Database Class - Pontos de defasagem e questões de brinde.Jann Claude Mousquer
 
QConSP16 - Apache Cassandra Evoluindo Sistemas Distribuídos
QConSP16 - Apache Cassandra Evoluindo Sistemas DistribuídosQConSP16 - Apache Cassandra Evoluindo Sistemas Distribuídos
QConSP16 - Apache Cassandra Evoluindo Sistemas DistribuídosEiti Kimura
 
TimesTen In-Memory Database
TimesTen In-Memory DatabaseTimesTen In-Memory Database
TimesTen In-Memory DatabaseAndre Danelon
 
Isolamento e mvcc
Isolamento e mvccIsolamento e mvcc
Isolamento e mvccLocaweb
 
TechEd 2010: Escalando aplicações OLTP:Design de aplicação e considerações pa...
TechEd 2010: Escalando aplicações OLTP:Design de aplicação e considerações pa...TechEd 2010: Escalando aplicações OLTP:Design de aplicação e considerações pa...
TechEd 2010: Escalando aplicações OLTP:Design de aplicação e considerações pa...Fabrício Catae
 
Aplicando processamento paralelo em instruções SQL
Aplicando processamento paralelo em instruções SQLAplicando processamento paralelo em instruções SQL
Aplicando processamento paralelo em instruções SQLpichiliani
 
Replicacao Object Sistemas
Replicacao Object SistemasReplicacao Object Sistemas
Replicacao Object Sistemastaniamaciel
 
Alta Disponibilidade TechEd
Alta Disponibilidade TechEdAlta Disponibilidade TechEd
Alta Disponibilidade TechEdViviane_ribeiro
 
Joomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portaisJoomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portaisrafaelberlanda
 
Tudo que você sempre quis saber e sempre teve medo de perguntar, sobre Perfor...
Tudo que você sempre quis saber e sempre teve medo de perguntar, sobre Perfor...Tudo que você sempre quis saber e sempre teve medo de perguntar, sobre Perfor...
Tudo que você sempre quis saber e sempre teve medo de perguntar, sobre Perfor...Joao Galdino Mello de Souza
 
Comparação de desempenho entre SQL e NoSQL
Comparação de desempenho entre SQL e NoSQLComparação de desempenho entre SQL e NoSQL
Comparação de desempenho entre SQL e NoSQLpichiliani
 
Refactoring Databases
Refactoring DatabasesRefactoring Databases
Refactoring DatabasesIsmael
 
High availability e Disaster Recovery é o seguro de vida de todo DBA
High availability e Disaster Recovery é o seguro de vida de todo DBAHigh availability e Disaster Recovery é o seguro de vida de todo DBA
High availability e Disaster Recovery é o seguro de vida de todo DBALuiz Henrique Garetti Rosário
 
InnoDB Plugin - II Fórum da Comunidade MySQL
InnoDB Plugin - II Fórum da Comunidade MySQLInnoDB Plugin - II Fórum da Comunidade MySQL
InnoDB Plugin - II Fórum da Comunidade MySQLWagner Bianchi
 

Similaire à MANUTENÇÃO DE ÍNDICES: O GUIA DEFINITIVO (20)

Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...
Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...
Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...
 
SQLSat #127
SQLSat #127SQLSat #127
SQLSat #127
 
Database Class - Pontos de defasagem e questões de brinde.
Database Class - Pontos de defasagem e questões de brinde.Database Class - Pontos de defasagem e questões de brinde.
Database Class - Pontos de defasagem e questões de brinde.
 
Pgbr2013
Pgbr2013Pgbr2013
Pgbr2013
 
QConSP16 - Apache Cassandra Evoluindo Sistemas Distribuídos
QConSP16 - Apache Cassandra Evoluindo Sistemas DistribuídosQConSP16 - Apache Cassandra Evoluindo Sistemas Distribuídos
QConSP16 - Apache Cassandra Evoluindo Sistemas Distribuídos
 
TimesTen In-Memory Database
TimesTen In-Memory DatabaseTimesTen In-Memory Database
TimesTen In-Memory Database
 
Isolamento e mvcc
Isolamento e mvccIsolamento e mvcc
Isolamento e mvcc
 
Db2
Db2Db2
Db2
 
TechEd 2010: Escalando aplicações OLTP:Design de aplicação e considerações pa...
TechEd 2010: Escalando aplicações OLTP:Design de aplicação e considerações pa...TechEd 2010: Escalando aplicações OLTP:Design de aplicação e considerações pa...
TechEd 2010: Escalando aplicações OLTP:Design de aplicação e considerações pa...
 
Aplicando processamento paralelo em instruções SQL
Aplicando processamento paralelo em instruções SQLAplicando processamento paralelo em instruções SQL
Aplicando processamento paralelo em instruções SQL
 
Replicacao Object Sistemas
Replicacao Object SistemasReplicacao Object Sistemas
Replicacao Object Sistemas
 
Alta Disponibilidade TechEd
Alta Disponibilidade TechEdAlta Disponibilidade TechEd
Alta Disponibilidade TechEd
 
Receitas XE
Receitas XEReceitas XE
Receitas XE
 
Joomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portaisJoomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portais
 
Tudo que você sempre quis saber e sempre teve medo de perguntar, sobre Perfor...
Tudo que você sempre quis saber e sempre teve medo de perguntar, sobre Perfor...Tudo que você sempre quis saber e sempre teve medo de perguntar, sobre Perfor...
Tudo que você sempre quis saber e sempre teve medo de perguntar, sobre Perfor...
 
Mainframe Performance Review
Mainframe Performance ReviewMainframe Performance Review
Mainframe Performance Review
 
Comparação de desempenho entre SQL e NoSQL
Comparação de desempenho entre SQL e NoSQLComparação de desempenho entre SQL e NoSQL
Comparação de desempenho entre SQL e NoSQL
 
Refactoring Databases
Refactoring DatabasesRefactoring Databases
Refactoring Databases
 
High availability e Disaster Recovery é o seguro de vida de todo DBA
High availability e Disaster Recovery é o seguro de vida de todo DBAHigh availability e Disaster Recovery é o seguro de vida de todo DBA
High availability e Disaster Recovery é o seguro de vida de todo DBA
 
InnoDB Plugin - II Fórum da Comunidade MySQL
InnoDB Plugin - II Fórum da Comunidade MySQLInnoDB Plugin - II Fórum da Comunidade MySQL
InnoDB Plugin - II Fórum da Comunidade MySQL
 

Plus de Luciano Moreira

Apresentando o Azure DocumentDB
Apresentando o Azure DocumentDBApresentando o Azure DocumentDB
Apresentando o Azure DocumentDBLuciano Moreira
 
Entendendo o paralelismo no SQL Server
Entendendo o paralelismo no SQL ServerEntendendo o paralelismo no SQL Server
Entendendo o paralelismo no SQL ServerLuciano Moreira
 
Do MTA ao MCM*, carreira SQL Server e DBA multiplataforma
Do MTA ao MCM*, carreira SQL Server e DBA multiplataformaDo MTA ao MCM*, carreira SQL Server e DBA multiplataforma
Do MTA ao MCM*, carreira SQL Server e DBA multiplataformaLuciano Moreira
 
SQLServerDF XII - Wait Types
SQLServerDF XII - Wait TypesSQLServerDF XII - Wait Types
SQLServerDF XII - Wait TypesLuciano Moreira
 
SQLServerDF XIII - xEvents
SQLServerDF XIII - xEventsSQLServerDF XIII - xEvents
SQLServerDF XIII - xEventsLuciano Moreira
 
Confiabilidade de pacotes no SSIS
Confiabilidade de pacotes no SSISConfiabilidade de pacotes no SSIS
Confiabilidade de pacotes no SSISLuciano Moreira
 

Plus de Luciano Moreira (7)

Apresentando o Azure DocumentDB
Apresentando o Azure DocumentDBApresentando o Azure DocumentDB
Apresentando o Azure DocumentDB
 
Entendendo o paralelismo no SQL Server
Entendendo o paralelismo no SQL ServerEntendendo o paralelismo no SQL Server
Entendendo o paralelismo no SQL Server
 
Do MTA ao MCM*, carreira SQL Server e DBA multiplataforma
Do MTA ao MCM*, carreira SQL Server e DBA multiplataformaDo MTA ao MCM*, carreira SQL Server e DBA multiplataforma
Do MTA ao MCM*, carreira SQL Server e DBA multiplataforma
 
SQLInternalOps - SQLOS
SQLInternalOps - SQLOSSQLInternalOps - SQLOS
SQLInternalOps - SQLOS
 
SQLServerDF XII - Wait Types
SQLServerDF XII - Wait TypesSQLServerDF XII - Wait Types
SQLServerDF XII - Wait Types
 
SQLServerDF XIII - xEvents
SQLServerDF XIII - xEventsSQLServerDF XIII - xEvents
SQLServerDF XIII - xEvents
 
Confiabilidade de pacotes no SSIS
Confiabilidade de pacotes no SSISConfiabilidade de pacotes no SSIS
Confiabilidade de pacotes no SSIS
 

MANUTENÇÃO DE ÍNDICES: O GUIA DEFINITIVO

  • 1. Manutenção de índices: o guia definitivo Ivan Lima Luciano Caixeta Moreira – {Luti} “PASS Supporter - SQLServerDF” PASS Chapter Leader - SQLServerDF http://ivanglima.com/ http://luticm.blogspot.com @sqlinsane @luticm http://www.srnimbus.com.br http://www.srnimbus.com.br
  • 2. Agenda Conhecimento geral de índices Fill factor padrão de x% Shrink após um rebuild Limites de fragmentação 10% e 30% Fragmentação de ramo (da B+tree) Compressão de índice não-cluster O guia definitivo 2
  • 3. Conhecimento geral de índices  Índices = B+tree  Cluster e não-cluster  1 cluster por tabela - Nível folha contém dados  N índices cluster - Nível folha contém referência para registro  RID (heap) ou KEY (clustered)  Composto, INCLUDE, Filtered  Ausência de cluster = heap  SYS.DM_DB_*  Sys.dm_db_index_physical_stats (DBCC SHOW_CONTIG)  Rebuild vs. Reorganize  Tipos de fragmentação 3
  • 4. Fill factor padrão de x%  Qual o fill factor padrão da sua instância?  Qual o fill factor recomendado?  90%? 80%? 70%? 50%?  Somente é válido para índices que se fragmentam  Deixa espaço em branco na página = impacto no data cache!  Fill factor = fator de preenchimento, não quanto você deixa vazio na página de dados!  AKA => Fill factor de 1% é “um pouco” ruim...!  Vamos fazer cálculos...  Índice com 50GB acumulado em 2 anos de sistema em produção  Rebuild semanal  Fillfactor de 80% = 10GB de inserção em uma semana?!!! 4
  • 6. Shrink após o rebuild  Rebuild cria um novo índice em outro local do arquivo  Meu banco de 1,6TB cresceu 200GB depois dos rebuilds  Normal, isso é o esperado quando se tem objetos grandes  O log de transação também cresce muito!  Mas eu estou com Recovery Model Simple?  Sim meu caro, mas é uma transação então o minLSN prende seus VLFs!  Mas eu tenho espaço livre, o SSMS me mostra! O que fazer?  Shrink do arquivo de log (não funciona com recovery model full?)  Shrink do arquivo de dados  NNNNNNÃÃÃÃÃÃÃÃÃÃOOOOOOO  Problema de espaço não se resolve com “jeitinho” 6
  • 8. Limites de fragmentação 10% e 30%  Limites de reorganize vs. rebuild  É a recomendação padrão que utilizamos e vemos por aí?  Qual fragmentação? Lógica? Física? Interna?  É uma boa recomendação?  Em geral sim!  Mas... E se o seu índice não fragmenta mais de 30% entre a frequência de entrada do reorganize?  Rebuild NUNCA é executado!  Você pode sobreviver com isso, talvez sim, mas com ressalvas...  Index interleaving e fragmentação física  Aplicar o fill factor (baixar % uso da página)  Estatísticas 8
  • 9. Fragmentação de ramo (da B+tree)  Caso os seus índices sejam muito grandes, além do custo de manutenção o que pode acontecer?  Uma fragmentação importante passar despercebida  Como? Fragmentando um ramo da sua árvore, aquele ramo que você mais utiliza  Resultado: DMV não te mostra um ramo, mas sim de toda a árvore.  Pode causar impacto similar ao fill factor de 80%, só que de 50%  Artigo escrito em Fev/2012: No significant fragmentation? Look closer  http://www.simple-talk.com/sql/database-administration/no-significant- fragmentation-look-closer%E2%80%A6/ 9
  • 11. Compressão de índice não-cluster  Índices cluster usualmente são bons candidatos para uma compressão de registro (muitos campos tamanho fixo, null, etc.)  E os índices não-cluster, em especial tipos VARCHAR(x)?  Maria da Silva Silva, Maria da Silva Silvania, Maria da Silva Souza  Compressão de prefixo vai ficar interssante.  Considerar o impacto de CPU!  Qual o ganho potencial?  Mais registros por página => melhor eficiência do data cache => menor quantidade de I/O => melhor desempenho  Potencialmente ganho significativo na janela de manutenção dos seus índices (I/O bound) 11
  • 12. DEMO Compressão de índice não-cluster 12
  • 13. O guia definitivo  Se no seu ambiente a janela de manutenção é de 10 horas e o tempo para rebuild completo é de 3 horas...  REBUILD ALL!!!  Script auxiliares:  http://ola.hallengren.com/  http://sqlfool.com/2011/06/index-defrag-script-v4-1/  Diversas opções, como por exemplo, limitar tempo da janela de manutenção  Scripts do seu ambiente  SQL Server Management Studio  Pode dar mais trabalho  Pode levar a erros ou problemas quando seus bancos de dados crescerem  Tabelas com menos de 10.000 páginas (~ 80MB)  Rebuild com a maior frequência (diário) 13
  • 14. O guia definitivo  Reorganize sempre  Respeite a sua janela de manutenção  É leve mas tem impacto. Caso de jobs simulâneos, ISCSI = timeout  Índices grandes (de verdade)  Particionar índices  Campo data? Últimos 6 meses, 1 ano e ½ e restante  RAIDs diferentes (melhor desempenho para o hot spot)  Rebuild de partição  Índices muito utilizados e grandes  Analisar fragmentação de ramos (índices filtrados ajudam)  Considere particionamento  Pode trabalhar com 10% e 30%  Force o rebuild com certa regularidade  Como saber se houve reorganize ou rebuild de um índice?  Alterar script da Michele para guardar comandos 14
  • 15. O guia definitivo  Considere a ordem de manutenção dos índices  Casos onde o cliente limita a janela e faz diariamente reorganize dos mesmos índices que fragmentam mais de 10% em um dia  Solução não é um script genérico  São vários script menores para controlar objetos, ordem de execução, dias e horários, etc.  Lembre-se da atualização de estatísticas  Reorganize não o faz  Depois de um rebuild completo ou do índice, não atualize a estatística dos índices (UPDATE STATISTICS ... COLUMNS)  Cuidado com sys.dm_db_index_physical_stats  Principalmente com o DETAILED  Guarde os registros do resultado quando consultar a DMV (No I/O waste!) 15
  • 16. O guia definitivo  Fill factor específico para cada índice  Basta executar uma vez com o fill factor que deseja, na próxima execução se não especificado o SQL Server usa o mais recente  Cuidado com geração de código que muda o fill factor  Leve em conta o percentual de atualização e novos dados  Se não sabe o fill factor e não tem ideia das características do objeto, deixe em 95% e monitore  Monitoramento constante  Os padrões da sua aplicação não mudam com tanta frequência  Mas novos builds e sistemas novos podem trazer comportamentos inesperados 16
  • 17. Mais outros...  Limitar paralelismo  MAXDOP = 1  Janela mais longa, porém impacto de CPU menor (online)  Sort in TempDB  Trade-off de overhead com resultados intermediários do sort  ONLINE  Impacto na tempdb (version store)  Limitações: LOB (SQL 2012 NCL LOB included), partição, XML, spatial  Online não é 100% online  Início: Shared lock no objeto de origem  Fim: Shared lock no objeto de destino e SCH-M lock na origem 17
  • 18. De acordo com o guia do DBA das galáxias...  Oh, excelentíssima e maior potência intelectual da galáxia, qual é o fill factor padrão que devo adotar para TODAS as minhas instâncias SQL Server? (384833 anos processando a resposta e....) 42! Piadinha, ok? 18
  • 19. Questions? Ivan Lima Luciano Caixeta Moreira – {Luti} “PASS Supporter - SQLServerDF ” PASS Chapter Leader - SQLServerDF http://ivanglima.com/ http://luticm.blogspot.com @sqlinsane @luticm
  • 20. Thank You for Attending