SQL Server – Performance e Tunning

2,766 views

Published on

Por Pedro Martins

Nesta sessão iremos abordar como identificar bottlenecks, a analisar planos de execução e a performance do SQL Server 2012. Iremos também comparar os diferentes tipos de índice e como eles podem ajudar a melhorar o desempenho do servidor. Finalmente, iremos ver alguns truques em stored procedures.

Agenda:

Planos de execução
Índices
Otimização de Stored Procedures

Published in: Technology
0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,766
On SlideShare
0
From Embeds
0
Number of Embeds
34
Actions
Shares
0
Downloads
0
Comments
0
Likes
7
Embeds 0
No embeds

No notes for slide
  • Identificar bottlenecks, a analisar planos de execução e a performance do SQL Server 2012Comparar os diferentes tipos de índice e como eles podem ajudar a melhorar o desempenho do servidor.Truques em storedprocedures.
  • Indexaçãoporexcessoouporfalta;Estatísticaserradas = nãootimizaçãopor parte do Query Optimizer;Queries nãootimizadas = rows oucolunasdesnecessárias, queries mal escritas;Planos de execução (parameter sniffing usadopelo Query Otimizerbaseadonasestatísticas)ACID (Atomicidade, Consistência, Isolamento e Durabilidade)Fraco design da BD (Exemplo, BD desnormalizada)Fragmentação leva a PageSplitsRecompilação de queries –parameterizedexecutionplan independente dos parâmetros submetidos;Cursores causam demasiado overhead, usar modo fast-forwardApenas uma Tempb por SQL Server Instance (temporarytables, tablevariables, hashtables em joins, sorts e rowversionamento)
  • Snapshot isolation = tempdb I/Os + page splitsReduzida RAM do servidor = smaller buffer pool + lazy writer and lazy read;
  • Clustered: Forma B-TreeComputed Columns: Persisted e DeterministicasSpatial Data: alguns funções de Geometry e Geography;
  • PageHeader: 96 bytesPágina: 8KVários tipos de página: Dados, Índices, BLOB’s, Diferenças entre páginas desde o último Backup database8páginas = 1 extent
  • Custered tem o root node (ponto de entrada à tabela), intermediate nodeDados fisicamente gravados de forma ordenada;Por default, a primarykey é um ClusteredIndex se não houver ClusteredIndex na tabela;
  • Overindexing
  • Duplicateindexing
  • Bestpractices:Criar quando necessários;Evitar chaves grandes;Evitar usar em coluna cujos valores mudam frequentemente
  • SQL Server – Performance e Tunning

    1. 1. NOME DA APRESENTAÇÃONome (Nick no Fórum)25 DE MAIO @MICROSOFTSQL Server – Performance e TunningPedro Martins (Rechousa)
    2. 2. AgendaPrincipais problemasPlanos de ExecuçãoÍndicesOtimização de Stored Procedures# 2
    3. 3. Principaisproblemas# 361%Fonte:Fritchey, G. (2012). SQL Server 2012 Query Performance Tuning (3rd ed.). Apress.
    4. 4. Workflow paraotimizaçãoFonte:Fritchey, G. (2012). SQL Server 2012 Query Performance Tuning (3rd ed.). Apress.# 4
    5. 5. DEMONSTRAÇÃOPlanos de execução
    6. 6. PerformanceKillers# 6• Má indexação;• Estatísticas desatualizadas;• Queries não otimizadas;• Planos de execução não reutilizados ou não otimizados;• Demasiados locks e deadlocks;• Fraco design da BD;• Excessiva fragmentação;• Constante recompilação de queries;• Uso de cursores de forma imprópria;• Configuração errada do LOG;• Uso excessivo da tempdb;
    7. 7. Subsistemade Storage# 7• Planos de execução:• Estatísticas desatualizadas;• Alterações de código;• Indexing (table scans vs index seeks);• Índices repetidos / desnecessários;• CDC (Change Data Capture);• Snapshot isolation;• Reduzida RAM do servidor;
    8. 8. Tipos de Índices# 8• Clustered;• Nonclustered;• Unique• Columnstore *• Index with included columns• Index on computed columns *• Filtered• Spatial• XML• Full-text
    9. 9. Pagese Extents# 9Página = 8kExtent = 8 PáginasTipos de página:• Dados;• Índices;• BLOB’s;• etc;
    10. 10. Clusteredvs Nonclustered# 10Clustered:• Dados gravados ordenados;• Máximo de um por tabela;• Estrutura B-Tree;Nonclustered:• Índices criados externamente;• Máximo 999;• Lista ordenada com apontador;
    11. 11. DEMONSTRAÇÃOClustered e Nonclustered
    12. 12. Demasiadosíndices# 12• Consumo de espaço desnecessário;• Queries podem usar índices de forma menoseficiente;• Plano de execução menos eficiente;• Degradação da performance;• Confusão na manutenção da BD;
    13. 13. DEMONSTRAÇÃOOver indexing
    14. 14. Índicesduplicados# 14• Reduzem a performance de INSERT, UPDATE eDELETE• Sem vantagens para SELECT;• Consumo de espaço desnecessário;
    15. 15. DEMONSTRAÇÃODuplicate indexing
    16. 16. Otimizações# 16• Devem ser executadas num horário off peak;• Evitar DBCC SHRINKDB – aumentafragmentação;• Selecionar o fill-factor apropriado pode reduzir afragmentação;• Clustered indexes devem ser criados em colunascujos valores são únicos e incrementais, deforma a evitar a fragmentação;• Desativar Boost SQL Server priority;• Separar ficheiros de Dados e Logs em diferentespartições;
    17. 17. Otimizações: ClusteredIndexes# 17• Determinam a ordem física de como os dadossão gravados fisicamente;• Aumento de performance em colunas:• com muitos valores distintos;• que são acedidas frequentemente;• com pesquisas de intervalos de valores;• que retornam muitos dados;Nota:Primary keys criam automaticamente clusteredindexes;
    18. 18. DEMONSTRAÇÃOClustered
    19. 19. Otimizações: remover índicesduplicados# 19• Identificar os índices duplicados;• Removê-los!
    20. 20. DEMONSTRAÇÃOIdentificar e remover índices duplicados
    21. 21. Otimizações: desfragmentaríndices# 21• Fragmentação reduz a performance;• A desfragmentação de índices é uma essencialtarefa de manutenção;• Recomendado:• Reorganizar se fragmentação entre 10% e 30%• Reconstruir se fragmentação superior a 30%
    22. 22. DEMONSTRAÇÃOFragmentação de índices
    23. 23. Checklist# 23• Verificar índices excessivos;• Criar índices para queries mais críticas;• Verificar planos de manutenção:• Rebuild e Reorganize;• Update Statistics;• Retornar apenas as colunas necessárias;• Usar SET NOCOUNT ON;• Particionar tabelas com muitos dados;• Reduzir a utilização da TempDB;• Criar índices COLUMNSTORE para soluções dedata warehousing;
    24. 24. TableValue Parameters# 24• Permitem o envio de parâmetros que contêm umaestrutura “do tipo tabela”;• Requerem a criação de um User defined Table Type;• O parâmetro a receber tem de ser READONLY;
    25. 25. DEMONSTRAÇÃOTVP + MERGE
    26. 26. Dúvidas / Questões ?
    27. 27. Obrigado !Pedro Martinsrechousa@gmail.comhttp://www.linkedin.com/in/rechousa
    28. 28. Patrocinador GoldPatrocinadores Silver
    29. 29. Media Partners

    ×