Porque minha
query está lenta?
Iniciando um
trobleshooting
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/
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
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
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)
Í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.
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
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!
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)
DEMO!!!
Dúvidas?
Obrigada!

Por que minha query esta lenta? - Suellen Moraes

  • 1.
    Porque minha query estálenta? Iniciando um trobleshooting
  • 2.
    Quem sou eu? Atuando nomercado 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 peloSQL 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 paraperformance 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 ocusto 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 aafirmaçã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 umbaseline 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)
  • 10.
  • 11.
  • 12.

Notas do Editor

  • #4 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.
  • #5 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.
  • #6 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.
  • #8 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. 
  • #9 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....