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
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. 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. Tipos de Índices
# 8
• Clustered;
• Nonclustered;
• Unique
• Columnstore *
• Index with included columns
• Index on computed columns *
• Filtered
• Spatial
• XML
• Full-text
12. Demasiadosíndices
# 12
• Consumo de espaço desnecessário;
• Queries podem usar índices de forma menos
eficiente;
• Plano de execução menos eficiente;
• Degradação da performance;
• Confusão na manutenção da BD;
16. Otimizações
# 16
• Devem ser executadas num horário off peak;
• Evitar DBCC SHRINKDB – aumenta
fragmentação;
• Selecionar o fill-factor apropriado pode reduzir a
fragmentação;
• Clustered indexes devem ser criados em colunas
cujos valores são únicos e incrementais, de
forma a evitar a fragmentação;
• Desativar Boost SQL Server priority;
• Separar ficheiros de Dados e Logs em diferentes
partições;
17. Otimizações: ClusteredIndexes
# 17
• Determinam a ordem física de como os dados
sã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 clustered
indexes;
21. Otimizações: desfragmentaríndices
# 21
• Fragmentação reduz a performance;
• A desfragmentação de índices é uma essencial
tarefa de manutenção;
• Recomendado:
• Reorganizar se fragmentação entre 10% e 30%
• Reconstruir se fragmentação superior a 30%
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 de
data warehousing;
24. TableValue Parameters
# 24
• Permitem o envio de parâmetros que contêm uma
estrutura “do tipo tabela”;
• Requerem a criação de um User defined Table Type;
• O parâmetro a receber tem de ser READONLY;
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