Partes II, III, IV e V dos on-demand de ExecPlans
Galera, depois da boa aceitação do publico para com os treinamentos on-demand estamos publicando novas turmas.
O Luti vai falar sobre indexação: on-demand] Indexação I – Conceitos, criação e estrutura física
O Ivan vai falar sobre T-SQL: [on-demand] Transact SQL I – Introdução e consultas básicas
Eu volto a falar sobre Execution Plans: [on-demand] Planos de execução II – Estatísticas, Seeks e Scans
Novamente estamos fazendo promoção de lançamento, quem comprar até o final do ano, paga R$100,00 reais por cada treinamento.
Aproveitando o embalo, já publiquei o conteúdo dos módulos III, IV e V do treinamento de execution plans, galera tem MUITA coisa boa, e o módulo IV ficou #sinistro .
Ainda não temos previsão de quando eles serão lançados, mas pretendemos publicar essa informação em breve.
Se você achou interessante e quer fazer uma imersão em sua empresa, converse conosco, quem sabe não passamos alguns dias in-company e sua empresa paga tudo? Melhor impossível não? Qualquer dúvida manda um e-mail pra contato@srnimbus.com.br
Considerando todas os módulos temos as seguintes ementas:
ExecPlans parte I:
Query optimizer: como funciona e como analisar um plano de execução
Otimizando consultas analisando operadores
· 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?
o O que é prefetch? Devo me preocupar com ele?
o Nested Loops Optimized, o que é isso?
· 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 Entendendo memory grant
o xEvent – sort_memory_grant_adjustment
o In-Memory sort versus regular-sort
§ Single pass spill e Multiple Pass spill
o Analisando opções para evitar sort_warnings
· Melhorando consultas com operador Merge 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
ExecPlans parte II:
Query optimizer: 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 parte I
o Manutenção em estatísticas
o Auto Update, Auto Created, Auto update async e norecompute
o Estatísticas filtradas
o Estatísticas cross-table
o Variáveis do tipo table versus tabelas temporárias
· Operadores
o Index scan e table scan
§ Allocation order scan
· Nolock – Uma bomba relógio
· 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
o Index Seek
§ Seek predicate
§ Predicate
§ Range scan
§ Quando um seek é na verdade um Scan
§ Seek é sempre melhor que scan?
§ Hints – “Ajudando” otimizador de consultas com ForceSeek
ExecPlans parte III:
Estatísticas avançado parte II
· Estatísticas correlatas e densidade
· Atualizando estatísticas com valores falsos
· TraceFlags – 2388, 2389, 2390, 2371 (SQL2008SP1), 9292, 9204 e 8666.
· Identificando colunas ascendentes
· Date correlation optimization
· Estatísticas faltando
· Gap nas estatísticas
· Estatísticas em várias colunas
· Regra diferenciada para ler um histograma
· Tried trees para estimar strings
· AutoCreated – Computed columns
· Estatísticas em views
· Estatísticas em functions
· Impacto das estatísticas em operações de rebuild
Operadores
· 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
ExecPlans parte IV:
Detalhando o processo de otimização de uma consulta
· Parse
· Bind
· Query tree
· Constant folding
· Expand view
· Auto parameterization
· Pre-otimization
o NNF convert
o Project remove
o Simplify
§ Constraint
§ Remove redundant
§ Unnest
o Join collapse
o Derive cardinality
o Heuristic join order
o Project nomalization
· Full otimization
o Trivial plan
o Search 0
o Search 1
o Search 2
· Transformation stats (rules)
· Entendendo conceitos importantes
o Seletividade
o Densidade
o Cardinalidade
o Magic Density/Guess
o Foldable expressions
o SARGs
o Simplifications
§ Eliminando joins (FKs)
§ Detectando contradição (Check constraints)
§ Índices únicos (eliminando Asserts)
o NonUpdating updates
· 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
Operadores
· Loop join
· Merge join (coberto no módulo I)
· Hash joins
· Hints – “ajudando” otimizador com force order
o Criando bushy plans
· Hints – “ajudando” otimizador forçando um algoritmo de join
ExecPlans parte V:
Aprendendo mais com analise de bugs e ”gaps na funcionalidade” do Otimizador de consultas
· IS NOT NULL
· Comando Merge
· Expression in queries
· Operador de Filter
· Produto cartesiano
· Stream Aggregate
· Filter vs Aggregation
· CTE e colunas duplicadas
Operadores
· Merge interval
· Assert
· Compute Scalar
· Concatenation
· Split, Sort e Collapse
Quebrando mitos
• 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