Três dias
de treinamento com objetivo de capacitar os profissionais de SQL Server a entender
melhor o produto, desenvolver e otimizar códigos T-SQL a fim de obter melhor
performance e escalabilidade. Este treinamento tem foco em códigos T-SQL e irá
encher sua cabeça de códigos e dicas, no total serão exibidas 300 dicas
relacionadas a otimização no SQL Server.
Uma coisa é
certa, seu arsenal de otimização será elevado ao nível avançado. Você também
terá disponível como referência lógica (se você lembrar) e física (o material
do treinamento) o conteúdo deste treinamento.
A pergunta
que fica é: Você está preparado para essa imersão?
Duração
Data e
horário
- O evento
será de 3 dias, dias 12, 13 e 14 (sim, é sábado) de dezembro de 2024.
- Das 09:00 às
17:00h (1 hora de intervalo de almoço e intervalos para café)
Local
- Av. Paulista, 967 - 1 andar - Bela Vista, São Paulo - SP, 01311-100
Valor
- 1 lote com 30%
de desconto R$ 1.680,00 (até dia 30/09/2024).
- 2 lote com 20%
de desconto R$ 1.920,00 (até dia 31/10/2024).
- 3 lote com
10% de desconto R$ 2.160,00 (até dia 15/11/2024).
- 4 lote sem
desconto R$ 2.400,00 (a partir do dia 16/11/2024).
As vagas
são limitadas, portanto, a melhor forma de garantir seu lugar no treinamento, é
comprar o quanto antes, ou, entrar em contato comigo.
Nota: Como de praxe, se você estiver “quebrado”,
desempregado ou precisando de ajuda financeira, entre em contato (e-mail,
linkedin, zap e etc) comigo pra gente combinar o que podemos fazer pra você
participar desse treinamento. O importante é querer.
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.
Status
do treinamento:
Aguardando
confirmação (vou atualizar esse status quando tivermos a confirmação da
quantidade mínima de pessoas pra fechar a turma).
- Update 20241016 - Treinamento confirmado
Reembolso:
- Se o
treinamento não for confirmado, o aluno receberá 100% de reembolso do valor
pago.
- Se o aluno
cancelar o treinamento com até dia 15/11/2024 ele receberá 100% de reembolso.
Cancelamentos após o dia 15/11/2024 não estarão aptos a reembolso.
Observações
e notas
- O conteúdo poderá
sofrer pequenos ajustes, de acordo com a necessidade.
- Faremos
emissão de certificado digital.
- Não
disponibilizaremos computadores, se você quiser, pode levar seu notebook, porém
tenha em mente que terá pouco espaço para colocá-lo. Devido a grande quantidade de dicas, é inviável que tenhamos tempo para prática
durante o treinamento, portanto, você poderá sim praticar, mas em casa com o material
fornecido.
Lista de dicas
Parte 1
1. Cuidado com “missing index”
2. Cuidados com NULL
3. Estatísticas – atualizando com valores falsos
4. Estatísticas – colunas ascendentes
5. Estatísticas – date correlation optimization
6. Estatísticas – desatualizadas
7. Estatísticas – faltando
8. Estatísticas – gap
9. Estatísticas – impacto em operações de rebuild
10. Estatísticas – múltiplas colunas
11. Estressando uma consulta
12. Indexando colunas calculadas
13. Intersecção de índices
14. Like ‘%%’ – Fultext search
15. Like Fultext search – Coringa no final + reverse
16. Like ‘%%’ – SQL Collate
17. Like ‘%%’ – Fragmentos de string
18. Ordenação – disco HDD, performance do tempdb
19. Ordenação – disco HDD, múltiplos arquivos do tempdb
20. Ordenação – disco SSD, performance do tempdb
21. Ordenação – disco SSD, múltiplos arquivos do tempdb
22. Order by é necessário
23. Pensando em sets, um exemplo
24. Removendo LOB da página de dados
25. Removendo lookups – Include
Parte 2
26. Otimizando inserções – Parallel insert, SQL2014+
27. Otimizando inserções – Operações minimamente logadas
28. Otimizando inserções – SSIS + Balaced Data Distributor
29. Otimizando inserções – Batch único ou vários inserts
30. Reescrita de T-SQL – Missing spool
31. Reescrita de T-SQL – Subquery ou CrossApply
32. Reescrita de T-SQL – LINQ vs TOP
33. Reescrita de T-SQL – Group by()
34. Row goal – Forceseek
35. Row goal – TOP N, TOP 100
36. Evitando HP – functions schemabinding
37. Evitando HP – evitando spool
38. Wide e narrow plans
39. SET ou SELECT
40. Variáveis locais ou parâmetros de entrada
41. Variáveis do mesmo tipo da coluna
42. Será que seek é sempre melhor que scan
43. Expurgo de forma eficiente
44. Utilizando clausula output
45. Residual predicates
46. Prefira um “between” a “IN”
47. Forçando paralelismo
48. Seek – quem filtra, index seek ou predicate
49. Otimizando algoritmo de merge join
50. Debug tupiniquim com RAISERROR WITH NOWAIT
Parte 3
51. Distinct ou group by
52. TOP 1 ORDER BY DESC ou MAX
53. Not In ou Not Exists
54. Subqueries ou CrossOuter apply
55. Union all VS Union
56. Count(1) ou Count (asterisco)
57. Ordem da escrita do join, importa
58. Escrevendo códigos dinâmicos com eficiência
59. Reescrevendo OUTER JOINS complexos
60. CTE para evitar múltiplo acesso a functions
61. Importância do cache plan
62. Filtros dinâmicos, utilizando “parameter embedding optimization”
63. “Parameter embedding optimization” – limitaçao com variável
64. Evitando recompilações
65. Minimizando tempo de compilação – Merge interval bug
66. Desnormalizando para obter performance
67. Utilizando tabela numérica auxiliar
68. Retornando maior valor de várias colunas
69. Tabela de sequência + identity vs sequence
70. WITH ENCRYPTION não funciona… nem perca tempo
71. Processamento em paralelo no SQL (multi threads com CLR)
72. Scan – Removendo fragmentação
73. Scan – Ajustando fillfactor
74. Scan – Aplicando compressão de dados
75. Scan – Scan direction e paralelismo
Parte 4
76. Views indexadas
77. Indice cluster – único
78. Indice cluster – estático
79. Indice cluster – sequencial
80. Indice cluster – pequeno
81. Particionamento – eliminaçao de partiçao
82. Indices únicos com vários valores NULL
83. Cuidados com nolock – leituras sujas
84. Cuidados com nolock – lendo mesma linha mais de uma vez
85. Cuidados com nolock – pulando linhas
86. Cuidados com nolock – mascarando erros de corrupção
87. Cuidado, case + subqueries
88. Otimizando COUNT (DISTINCT…)
89. Otimizando cursores
90. Utilizando SET STATISTICS IO, cuidado com funções
91. TOP com empate
92. Otimizando queries utilizando linked server
93. Cuidados com nolock – movimentaçao dos dados
94. Validando se a tabela está vazia… o que usar
95. Stream aggregate e compute scalar – Otimizando agregação
96. Conversões implícitas
97. Filtros – Iniciando com ‘Z’
98. Filtros – Removendo hora da data
99. Minimizando compilaçao de queries ad-hoc com plan guides
100. Convertendo scalar function em inline function
Parte 5
101. Criando índices hipotéticos
102. Índices filtrados
103. Bushy plans
104. Hash e order group hints
105. Planos de execução com “time out” na criação, TF8780
106. Planos bons o suficiente
107. Agregações de vetor e agregações escalares
108. Parameter sniffing problem
109. Aplicação, parametrizando corretamente – evitando cachebloat
110. Split de string
111. Gerando uma string delimitada
112. Contando a quantidade de caracteres em uma string
113. Identificando linhas duplicadas
114. Identificando ilhas
115. Identificando gaps
116. Lendo valor da linha anterior
117. Lendo valor da linha posterior
118. Identificando valores faltando
119. Retornando “running aggregations”
120. Transformando linhas em colunas dinamicamente
121. Ignorando linhas duplicadas
122. Qual impacto de sp
123. Qual impacto de set no count
124. Escondendo códigos do DBA
125. Ignorando todos os inserts
Parte 6
126. Retornando a quantidade de linhas de uma tabela
127. Simulando ambiente de produção em desenvolvimento
128. Cuidados com performance das funções de janela
129. Check constraints e sua relação com performance
130. Foreign keys e sua relação com performance
131. Evitando contenção de alocação de objetos no tempdb
132. Utilizando variáveis do tipo tabela com eficiência
133. Escrevendo consultas recursivas
134. XML – Índices seletivos
135. Paginação, como fazer
136. Índices únicos e seus benefícios
137. Force order
138. Ajustando query wait
139. Java + parametros unicode
140. Obtendo mais performance com prefetch
141. Problemas de bloqueios causados por prefetch
142. Cuidados com SQL Inj
143. Cuidados com ISNUMERIC
144. IF condição AND condição ou IF condição IF condição
145. Erro com ISNULL(ColunaQueNaoAceitaNULL) + colunas calculadas
146. Problemas com “auto create_update statistics”
147. Query com OPTION(MAXDOP 1) gerando wait em CXPACKET
148. Minimizando bloqueios com indexação
149. Lock escalation
150. Melhorando performance de MIN e MAX em tabelas particionadas
Parte 7
151. Reescrita de T-SQL – Quebrando query utilizando tabelas temporárias
152. Reescrita de T-SQL – Trocando JOIN + OR por CROSS APPLY e UNION
153. Reescrita de T-SQL – Otimizando DISTINCT COUNT
154. Reescrita de T-SQL – SARG vs NONSARG e filtros dinâmicos
155. Reescrita de T-SQL – Otimizando query com ORDER BY e NULLS LAST
156. Reescrita de T-SQL – Evitando sort em query com OVER(Col ORDER BY DESC)
157. Reescrita de T-SQL – Cursor melhor que set-based
158. Eita, eu não sabia que da pra fazer isso (TRANSLATE)
159. Eita, eu não sabia que da pra fazer isso (TRIM)
160. Eita, eu não sabia que da pra fazer isso (CONCAT_WS)
161. Eita, eu não sabia que da pra fazer isso (DECLARE c CURSOR)
162. Eita, eu não sabia que da pra fazer isso (AS Tab(ColName))
163. Eita, eu não sabia que da pra fazer isso (DROP TABLE Tab1, Tab2)
164. Eita, eu não sabia que da pra fazer isso (TRUNCATE com WHERE)
165. Utilizando otimização de insert mais rápido no SQL2014+ e tempdb
166. CachePlan – Simple – AutoParam
167. Testando hyper-threading
168. CachePlan – Cuidados com parametrização na App e TF144
169. CachePlan – Optimize for adhoc workloads
170. CachePlan – sp_prepare vs direct exec
171. CachePlan – Textos iguais, hash tem que bater
172. CachePlan – Plan Reuse-affecting set options
173. Apagando um índice para deixar uma consulta mais rápida
174. Comprimindo VARCHAR MAX com ColumnStore
175. Deu ruim quando liguei read commited snapshot isolation level
Parte 8
176. Utilizando traceflag 174
177. Utilizando traceflag 610
178. Utilizando traceflag 715
179. Utilizando traceflag 1117
180. Utilizando traceflag 2335
181. Utilizando traceflag 2371
182. Utilizando traceflag 2453
183. Utilizando traceflag 2505
184. Utilizando traceflag 2548
185. Utilizando traceflag 3042
186. Utilizando traceflag 3226
187. Utilizando traceflag 7412
188. Utilizando traceflag 7470
189. Utilizando traceflag 7471
190. Utilizando traceflag 8602
191. Utilizando traceflag 8666
192. Utilizando traceflag 8677
193. Utilizando traceflag 8690
194. Utilizando traceflag 8722
195. Utilizando traceflag 8755
196. Utilizando traceflag 8757
197. Utilizando traceflag 9130
198. Utilizando traceflag 9389
199. Utilizando traceflag 9481
200. Utilizando traceflag 9495
Parte 9
201. Batch mode over row store
202. Parameter sensitive plan optimization
203. Memory grant feedback
204. CE Feedback
205. DOP Feedback
206. Scalar UDF inlining
207. QueryStore hints
208. Adaptive joins
209. Accelerated database recovery
210. Lightweight query plan ligado por padrão
211. sys.dm_exec_query_plan_stats
212. Alto uso de memória no Tempdb (eager writer)
213. Novo wait (WAIT_ON_SYNC_STATISTICS_REFRESH)
214. Compilação <> Otimização
215. Segurança – Explorando mensagens de erro
216. Explorando o CachePlan
217. Explorando o QueryStore
218. Segurança – validação senhas
219. Tempdb in-memory system objects
220. Transparent Data Encryption (TDE) e impacto nos backups
221. Redução de recompilação para workloads utilizando tabelas temporárias
222. Segurança – Linked server pwds
223. Resume e Pause para criação de índices online
224. Indirect checkpoint
225. Instant file initialization
Parte 10
226. Permissão LinkedServer SQL2008R2
227. Filtros LinkedServer Local VS Remote
228. LinkedServer vs sp_prepexec e sp_execute
229. LinkedServer INNER REMOTE JOIN
230. LinkedServer collation compatible
231. LinkedServer vs halloween protection
232. Script para validar compressão
233. View indexada vs Blocks e DeadLocks
234. Nível de isolamento vs Entity Framework
235. Nível de isolamento padrão, lock em select
236. Lock extra de query rodando em paralelo
237. Lock extra de query acessando LOB
238. Lock extra de query com halloween protection
239. Impacto de conexões com MARS habilitado
240. Problema de performance com funçao FORMAT
241. Memory leak no JDBC
242. Ajustando cost threshold for parallelism
243. Troubleshoot com windows performance toolkit
244. Read ahead
245. A significant part of sql server process memory has been paged out.
246. BP data cache – free_space_in_bytes e fragmentação
247. Ramp-up
248. Page disfavoring
249. Obtendo informações uteis do default trace e system_health
250. Analisando deadlock envolvendo apenas uma tabela
Parte 11
251. Operador do plano de execução – Table Spool (Lazzy Spool)
252. Operador do plano de execução – Table Spool (Eager Spool)
253. Operador do plano de execução – RowCount Spool
254. Operador do plano de execução – Index Spool
255. Operador do plano de execução – Merge interval
256. Operador do plano de execução – Split, Sort e Collapse
257. Operador do plano de execução – Loop join
258. Operador do plano de execução – Merge join
259. Operador do plano de execução – Hash join
260. Operador do plano de execução – Hash join vs residual predicate
261. Foldable expressions
262. NonUpdating updates
263. Group hints
264. DBCC OPTIMIZER_WHATIF
265. Ligando e desligando optimizer query rules
266. xEvent – inaccurate_cardinality_estimate
267. Windows pool on disk
268. Uso de Tempdb devido a um convert
269. QO Bug, Expressions In Queries
270. QO Bug, IS NOT NULL
271. QO Bug, Produto Cartesiano
272. QO Bug, Segment Operator
273. QO Bug, Filter VS Aggregation
274. QO Bug, MERGE
275. QO Bug
Parte 12
276. Índices – Script revisão de índices
277. Índices – Page Density
278. Índices – Fillfactor
279. Índices – SET Options
280. Índices – Uso de índices
281. Índices – Missing index (DMV)
282. Índices – Missing index (CachePlan)
283. Índices – Missing index (QueryStore)
284. Índices – PAGEIO_LATCH
285. Índices – Buffer pool
286. Índices – Index Scan
287. Índices – NonClustered -> Clustered
288. Índices – Row/Page lock desabilitado
289. Índices – Duplicados e Sobrepostos
290. Estatísticas – Script revisão de estatísticas
291. Estatísticas – Duplicadas
292. Estatísticas – Com atualização desnecessária
293. Estatísticas – Frequência alta de atualização
294. Estatísticas – Alto tempo de compilação
295. Estatísticas – MAXDOP
296. Estatísticas – Auto created multi column
297. Estatísticas – Update, de full pra sample
298. Estatísticas – Planos com alto número de estatísticas modificadas
299. Estatísticas – Planos com distinct
300. Estatísticas – Data skew
Parte 13 (bônus, se der tempo)
301. Resolução do desafio de performance – 1
302. Resolução do desafio de performance – 2
303. Resolução do desafio de performance – 3
304. Resolução do desafio de performance – 4
305. Resolução do desafio de performance – 5
306. Resolução do desafio de performance – 5
307. Resolução do desafio de performance – 6
308. Resolução do desafio de performance – 7
309. Resolução do desafio de performance – 8
310. Resolução do desafio de performance – 9
311. Resolução do desafio de performance – 10
312. Resolução do desafio de performance – 11