Como localizar queries lentas no SQL Server

Aprenda como localizar as queries que deixam o seu banco de dados lento

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?

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!

 

Quer conferir mais dicas sobre banco de dados? Clique aqui e veja mais dicas!