Como localizar queries lentas no SQL Server

Como localizar queries lentas no SQL Server

Um problema muito comum para quem trabalha com sistemas é ter que enfrentar lentidão no banco de dados.

Sabemos que isso pode ser causado por uma série de fatores, desde um mau planejamento da estrutura das tabelas,  falta de indíces, queries mal construídas, um hardware que não suporta o número de acessos, entre outros fatores.

Como identificar as consultas que exigem mais do sistema? Como identificar consultas lentas no SQL Server?

Para nos ajudar, o SQL Server possui um recurso chamado Dynamic Management Views, ou DMVs. Este é um recurso que que permite obter informações do servidor, isso permite monitorar o desempenho do servidor, o que permite diagnosticar problemas. Estas views possuem o prefixo "dm_". Elas fazem parte do schema "sys". Para serem executadas por seu usuário de banco de dados, o usuário deve possuir a permissão de "SELECT" e de "VIEW SERVER STATE" ou "VIEW DATABASE STATE"

A query a seguir permite ver as 10 queries com o maior número de operações de leitura, escrita e de tempo de utilização da CPU

 

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) as query,

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

 

 

Para ver mais queries, basta alterar o SELECT TOP 10 e trocar o número 10 pela quantidade desejada.

A primeira coluna possui a query que foi executada. Desta forma, você pode testar e ajustar a query para melhor performance.

Uma desvantagem deste método é que ele não diz quem chamou a query, ou seja, você vai ter que localizar em sua programação onde ela está sendo chamada. Mesmo assim, ainda é de grande ajuda!

 

Outros conteudos que podem ser de seu interesse

SQL vs DAX - Filtrando registros
05/12/2021SQL

SQL vs DAX - Filtrando registros

Compare as diversas formas de filtrar registros no SQL e no DAX

Saiba mais...
SQL vs Pandas - Operações Básicas parte 2
12/11/2023SQL

SQL vs Pandas - Operações Básicas parte 2

Neste segundo artigo você vai ver uma comparação de como pesquisar dados e unir resultados no SQL e no Pandas

Saiba mais...

Conteúdo sobre banco de dados sem complicação!