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.