Conteúdo Programático SQL Server Performance with nowait Duração: 32h Material de referência: Inside Microsoft SQL Server 2005: Query Tuning and Optimization (MSPRESS; ISBN: 0-7356- 2196-9) Microsoft SQL Server 2008 Internals (MSPRESS; ISBN: 0735626243) Complete Showplan Operators (Simple-Talk, ISBN: 978-1-906434-71-7) Inside the SQL Server Query Optimizer (Simple-Talk, ISBN: 1906434603) Descrição do treinamento No dia mais claro, na noite mais escura, no tuning mais desafiador e plano de execução mais sombrio nenhum problema de performance escapará da minha visão. As queries que assombram os servidores sucumbirão diante do meu conhecimento! Depois de fazer o juramento acima, os alunos que ousarem fazer este treinamento irão enfrentar horas de imersão em SQL Server estudando conceitos e técnicas de otimização para SQL Server com objetivo de executar um trabalho de otimização. O treinamento analisará detalhes do SQL Server, iremos do básico ao internals cobrindo várias áreas do SQL Server tais como: funcionamento dos índices, estatísticas, analise avançada de planos de execução e boas práticas para programação em T-SQL. Otimização de consultas e análise de planos de execução tem grande foco neste treinamento, entender como um plano de execução funciona, como ele é criado, e como influenciar o plano é a chave para otimização de códigos T-SQL. Este treinamento irá aprofundar nos detalhes internos de várias operações do SQL Server. Se você quer mergulhar no mundo do otimizador de consultas e otimização de códigos, este é o lugar certo! Espere exemplos deep dive, e horas de diversão cheias de comandos avançados e não documentados. Duração 32 horas. Público Alvo Desenvolvedores e DBAs que procuram entender melhor como suas decisões de arquitetura e programação impactam o banco de dados e o desempenho da solução. Curso voltado para aqueles que querem usar de forma eficiente os recursos do SQL Server.
Conteúdo Módulo 01: Introdução à otimização no SQL Server Processo de otimização: elementos, processo formal Query optimizer: como funciona e como analisar um plano de execução Ferramentas: Profiler, ClearTrace e SQLQueryStress Módulo 02: Estatísticas Introdução a estatísticas o Entendendo como estatísticas funcionam e sua importância o Lendo um histograma Estatísticas avançado o Manutenção em estatísticas o Auto Update, Auto Created, Auto update async e norecompute o Estatísticas filtradas Limitações estatísticas filtradas o Estatísticas cross-table o Variáveis do tipo table versus tabelas temporárias o Estatísticas correlatas e densidade o Atualizando estatísticas com valores falsos o TraceFlags - 2388, 2389, 2390, 2371 (SQL2008SP1), 9292, 9204 e 8666. o Identificando colunas ascendentes o Date correlation optimization o Estatísticas faltando o Gap nas estatísticas o Estatísticas em várias colunas o Regra diferenciada para ler um histograma o Tried trees para estimar strings o AutoCreated Computed columns o Estatísticas em views o Estatísticas em functions o Impacto das estatísticas em operações de rebuild Módulo 03: Índices Tipos e seu armazenamento físico (clustered e non-clustered) Covering indexes, filtered indexes e índices compostos. Views indexadas Melhores práticas para indexação Módulo 04: Operadores de planos de execução Index scan e table scan o Allocation order scan Nolock - Uma bomba relógio
o Inconsistências, leitura repetida e pulando linhas Index order scan Inconsistências, leitura repetida e pulando linhas Advanced scan (merry-go-round scanning) Scan direction e paralelismo Index Seek o Seek predicate o Predicate o Range scan o Quando um seek é na verdade um Scan o Seek é sempre melhor que scan? o Hints Ajudando otimizador de consultas com ForceSeek Key Lookup e RID Lookup o O que é? o Como melhorar consultas com Key Lookup utilizando clausula Include o Diferença entre Key Lookup e Rid Lookup o Cuidados com missing indexes (dicas do SQL Server) o Até quando vale a pena fazer um lookup? Melhorando consultas com o operador Sort o Otimizando consultas com operadores de SORT o Ordenação na aplicação ou no banco de dados? o Monitorando Sort Warnings o In-Memory sort versus regular-sort o Single pass spill e Multiple Pass spill o Analisando opções para evitar sort_warnings Spool o Table Spool Lazzy e Eager Halloween problem Entendendo rebind e rewind o Index Spool Regra diferenciada para rebind e rewind o Otimizando planos com operações de spool o RowCount Spool o Evitando spools em operações de insert com scalar functions Entendendo algoritmos de join Merge, loop e hash join o Entendendo o algoritmo de Merge Join o Evitando Sort Merge Join o Otimizando Merge Joins em disco o Cenários propensos a otimização do Merge Join o Nested Loop Como funciona
o O que é prefetch? Devo me preocupar com ele? Nested Loops Optimized, o que é isso? Overview e dicas Hash Join Como funciona In-Memory hash join Role Reversal Hash Bailout Hash Warning Event Outros operadores o Merge interval o Split, Sort e Collapse o Assert o Compute Scalar o Concatenation Módulo 05: Plano de execução avançado Detalhando o processo de otimização de uma consulta o Parse o Bind o Query tree o Constant folding o Expand view o Auto parameterization o Pre-otimization NNF convert Project remove Simplify Constraint Remove redundant Unnest Join collapse Derive cardinality Heuristic join order Project nomalization o Full otimization Trivial plan Search 0 Search 1 Search 2 o Transformation stats (rules) Entendendo conceitos importantes o Seletividade o Densidade o Cardinalidade o Magic Density/Guess o Foldable expressions o SARGs o NonUpdating updates
o o Hints Ajudando otimizador com force order - Bushy plans Group hints Wide/Narrow update plans Comandos avançados o DBCC OPTIMIZER_WHATIF o Rules (DBCC RULEON/OFF, QueryRuleOff) o Índices hipotéticos (DBCC AUTOPILOT, SET AUTOPILOT) o Discos SSDs VS peso do custo de IO/CPU (DBCC SETIOWEIGHT, SETCPUWEIGHT) o xevent - inaccurate_cardinality_estimate Novidades no Otimizador de consultas do SQL Server 2014 o Novo cardinality estimator o Select into em paralelo o Colunas ascendentes o Fazendo join entre histogramas o Valores faltando (Melhorado) o Predicados independentes o xevent - query_optimizer_estimate_cardinality Aprendendo mais com analise de bugs e gaps na funcionalidade do otimizador de consultas o IS NOT NULL o Comando Merge o Expression in queries o Operador de Filter o Produto cartesiano o Stream Aggregate o Filter vs Aggregation o CTE e colunas duplicadas Módulo 06: Functions Funções do usuário, quando usar e quando não usar! Multi e Inline functions, usando de forma eficiente Modulo 07: Triggers Trigger versus performance, quando usar e quando não usar! Analisando os prós e contras Módulo 08: Funções de Ranking (windowing functions) Entendendo windows functions Escrevendo códigos avançados com Windows Functions Exemplos: Procurando Gaps Identificando Ilhas Running Totals
Percentual comparado à média do período Diferença de vendas comparado ao ano anterior Identificando vendas que representam 10% ou mais do total de vendas Módulo 09: CTEs, TOP e CROSS APPLY Comandos avançados com CTEs e CTEs reursivas Resolvendo consultas complexas utilizando operadores Top e Apply Módulo 10: Stored Procedures Debate, criar procs para tudo? Benefícios Cases e cenários de uso Módulo 11: Boas práticas e mitos Otimizando Like %% COUNT(1) versus COUNT(*) JOIN versus EXISTS DISTINCT versus GROUP BY SET versus SELECT TOP 1 ORDER BY DESC versus MAX UNION versus UNION ALL NOT IN versus NOT EXISTS CURSOR versus WHILE Ordem das tabelas no JOIN Foreign Key ou não? Pré-requisitos O aluno já deve ter contato com o SQL Server enquanto desenvolvedor e saber escrever consultas T-SQL. É desejável conhecimento da plataforma de desenvolvimento da Microsoft (.NET).