domingo, 23 de junho de 2019

3 Maneiras para encontrar consultas SQL lentas

3 Maneiras para encontrar consultas SQL lentas

1. Encontre consultas lentas com DMVs SQL
Um dos ótimos recursos do SQL Server é são as DMVs (views de gerenciamento dinâmico) incorporadas a ele. Existem dezenas delas epodem fornecer uma riqueza de informações sobre uma ampla gama de tópicos.
Existem vários DMVs que fornecem dados sobre estatísticas de consulta, planos de execução, consultas recentes e muito mais. Estas podem ser usados juntos para fornecer algumas idéias surpreendentes.
Exemplo abaixo, pode ser usada para localizar as consultas que usam a maioria das leituras, gravações, tempo de trabalho (CPU) etc.
SELECT TOP 10 SUBSTRING(qt.TEXT, (qs.statement_start_offset/2)+1,
((CASE qs.statement_end_offset
WHEN -1 THEN DATALENGTH(qt.TEXT)
ELSE qs.statement_end_offset
END - qs.statement_start_offset)/2)+1),
qs.execution_count,
qs.total_logical_reads, qs.last_logical_reads,
qs.total_logical_writes, qs.last_logical_writes,
qs.total_worker_time,
qs.last_worker_time,
qs.total_elapsed_time/1000000 total_elapsed_time_in_S,
qs.last_elapsed_time/1000000 last_elapsed_time_in_S,
qs.last_execution_time,
qp.query_plan
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
ORDER BY qs.total_logical_reads DESC -- logical reads
-- ORDER BY qs.total_logical_writes DESC -- logical writes
-- ORDER BY qs.total_worker_time DESC -- CPU time
O resultado da consulta será algo como abaixo. A imagem abaixo é de um aplicativo de marketing. Você pode ver que uma consulta específica (a primeira) ocupa todos os recursos.
Com base na resultado na consulta SQL é possível analisar se há alguma maneira de melhorá-la, adicionar um índice, etc.
Find slow SQL queries with DMVs
Prós: Estatísticas de acumulação básica sempre disponíveis.
Contras: não informa o que está chamando as consultas. Não é possível visualizar quando as consultas estão sendo feitas com o tempo.

2. SQL Server Profiler

O SQL Server Profiler existe há muito tempo. É muito útil e possibilita ver em tempo real quais consultas SQL estão sendo executadas em seu banco de dados.
O SQL Profiler captura eventos muito detalhados sobre sua interação com o SQL Server.
Conexões de login, desconexões e falhas
Instruções SELECT, INSERT, UPDATE e DELETE
Chamadas de status de lote RPC
Início e fim dos procedimentos armazenados
Início e final de instruções dentro de um procedimento armazenado
Início e fim de um lote SQL
Erros gravados no log de erros do SQL Server
Um bloqueio adquirido ou liberado em um objeto de banco de dados
Um cursor aberto
Verificações de permissão de segurança

SQL Server Profiler
SQL SERVER PROFILER
Prós: Dados muito detalhados disponíveis.
Contras: Você tem que ativá-lo manualmente. Isso força você a recriar um cenário que você está tentando capturar. Eventualmente está indo embora em favor de Eventos Estendidos.

3. Eventos Estendidos do SQL Server

Eventos estendidos funciona via rastreamento de eventos (ETW). Esta tem sido a maneira comum de todas as tecnologias relacionadas à Microsoft exporem dados de diagnóstico.
O ETW oferece muito mais flexibilidade. Como desenvolvedor, eu poderia facilmente acessar os eventos ETW do SQL Server para coletar dados para usos personalizados. Isso é muito legal e muito poderoso.
Easily tap into ETW events from SQL Server to collect data for custom uses.
Prós: mais fácil de ativar e deixar em execução. Mais fácil de desenvolver soluções personalizadas com.
Contras: Uma vez que é bastante novo, a maioria das pessoas pode não estar ciente disso.

2 comentários:

Migrando Blog https://luizflsilva.wordpress.com/

Curtindo cada vez mais a criar conteudo que possa levar aprendizado a amantes e profissionais da area de banco de dados, estou migrando o bl...