on Feb 5th, 2010Hämta ut “slöa” queries ur mssql

Min morgon började roligt med en väldigt slö applikation. Jag misstänkte att flaskhalsen låg i databaslagret, och mycket riktigt hade jag rätt. Hur kom jag då fram till detta? Datbasservern jag använder är en MsSql 2008.

Efter lite sökande hittade jag en mycket användbar query för att plocka ur de dyraste frågorna som ställts mot databasen sedan den startades:

SELECT TOP 20 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.min_logical_reads, qs.max_logical_reads,
qs.total_elapsed_time, qs.last_elapsed_time,
qs.min_elapsed_time, qs.max_elapsed_time,
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
WHERE qt.encrypted=0
ORDER BY qs.total_logical_reads DESC

Detta är ett väldigt smidigt sätt för att hitta flaskhalser i sin databas.

För er som använder MySql kan jag rekommendera motsvarigheten log_slow_queries.

RSS

Lämna en kommentar