Durante os anos de experiencia percebi que grande parte dos desenvolvedores possuem dificuldade em iniciar o troubleshooting de suas queries, muitas vezes sobrecarregando o DBA em muitos dos casos com queries simples. O intuito desta palestrar é mostrar o "caminho das pedras" para despertar nos desenvolvedores a necessidade de se conhecer o funcionamento da ferramenta utilizada e visando os desenvolvimentos futuros tendo como foco o pensamento em performance do código escrito e dicas de melhores códigos.
2. Quem sou
eu?
Atuando no mercado com SQL
Server há 10 anos.
MCITP, MCSA, MCT
Atualmente DBA Sql Server na MC1
Tecnologia.
• Contatos:
• Email: suellensm@yahoo.com.br
• Facebook: suellen.moraes.794
• Linkedin:
https://www.linkedin.com/in/suellen-
moraes-46562138/
3. E por onde
começar?
• Nos ajudará a identificar o waits da query
em execução, se houver, que a query está
passando.
Sp_whoisactive
• Utilização de recursos.
DMV’s
Extended Events
• Várias opções que nos ajudam: error and
warnings, locks (deadlocks), Performance
(paralelismo), scans, entre outras.
Sql Server Profiler
4. Identificando
o Gargalo
• Indexação
• Estatisticas
• Plano de execução ruim
• Modelagem
Varios Ifs pelo caminho
• Memória, CPU, Disco, etc.
Hardware
• SO
• A propria Aplicação.
• Etc.
Outros
5. Estatísticas
Informações computadas pelo SQL
Server sobre a distribuição dos dados
na(s) coluna(s) do índice.
Utilizada pelo QO para analisar a
seletividade e a cardinalidade dos
dados, afim de criar um plano de
execução que utilize a melhor “rota” e
os melhores operadores para cada
caso.
dbcc show_statistics
([person.AddressType],
AK_AddressType_Name)
6. Índices
Grande aliado para performance das
nossas queries.
Conhecer os tipos de índices existentes
e suas funcionalidades para que sua
utilização seja mais efetiva.
Tudo em excesso também faz mal,
portanto use com moderação!!
Cuidado com a fragmentação e
quantidade alta de pages splits.
7. Plano de
execução
Analise o custo dos operadores.
Operadores do tipo blocking.
• Aguarda o termino da leitura de todas
as linhas para que o próximo operador
possa executar.
• Sort, Eager Spool
Operadores do tipo NonBlocking
• Lê a informação, processa e retorna a
linha para o próximo operador do
plano.
• Nested Loop, lazy spool
8. Dicas
Qual o
embasamento
para a afirmação
de que a query
está lenta?
Crie um baseline! E o
utilize!
Analise qual o
tempo que esta
sendo gasto no
SQL em relação
ao processo como
um todo.
Os processos da
aplicação também
custam.
Esteja presente
no momento do
desenvolvimento.
Ajudando o dev no
início do
desenvolvimento reduz
bastante a
probabilidade de
termos problemas em
prod!
9. Conclusão
Tenha um baseline SEMPRE!!
Mantenha suas estatísticas sempre
atualizadas.
Realize periodicamente a
manutenção dos seus índices.
Entenda como ler um plano de
execução.
O problema nem sempre é o SQL
Server.
Seja amiguinho do desenvolvedor
(ele é seu parceiro e não seu inimigo)
Sp_whoisactive: http://sqlblog.com/tags/Who+is+Active/sp_5F00_whoisactive/default.aspx
As Dmv’s nos ajudam a identificar queries que estão levando mais que x segundos para executar, podemos ver o plano de execução utilizado para essa query, quanto consumiu de memoria, Cpu e etc na sua execução.
Profile: As opções do sql profile nos ajudam a identificar as queries que podem estar impactando no ambiente utilizado operadores “pesados”, como sort warning, scans, paralelismo, é muito importante conhecer a ferramenta e seus recursos.
Sp_whoisactive: http://sqlblog.com/tags/Who+is+Active/sp_5F00_whoisactive/default.aspx
As Dmv’s nos ajudam a identificar queries que estão levando mais que x segundos para executar, podemos ver o plano de execução utilizado para essa query, quanto consumiu de memoria, Cpu e etc na sua execução.
Profile: As opções do sql profile nos ajudam a identificar as queries que podem estar impactando no ambiente utilizado operadores “pesados”, como sort warning, scans, paralelismo, é muito importante conhecer a ferramenta e seus recursos.
Falar sobre a atualização das estatísticas e o risco com a estatistica desatualizada. Enfatizar a importancia de se saber ler as informações nas estatísticas.
Sort = responsavel pela ordenação dos dados quando necessário é tipo blocking pois não vai pra “frente” antes que receba todos os dados.
Eager Spool = O operador Eager Spool pega toda a entrada, armazenando cada linha em um objeto temporário oculto armazenado no banco de dados tempdb.
Nested Loop = O operador Nested Loops executa operações lógicas de junção interna, junção externa esquerda, left semi join e left anti semi join. As junções de loops aninhados executam uma pesquisa na tabela interna para cada linha da tabela exterior, normalmente usando um índice.
Lazy Spool = O operador lógico Lazy Spool armazena cada linha de sua entrada em um objeto temporário oculto armazenado no banco de dados tempdb.
Para criar um baseline podemos principalmente utilizar o perfmon, sp_whoisactive salvando as informações. DMv’s.
Seja amiguinho do desenvolvedor.
Analise o tempo que esta sendo gasto de fato pelo SQL, o usuário tem a percepção do todo o que envolve muita coisa como aplicação rede hardware e etc....