2009-12-21 7 views
20

Stworzyliśmy tak wiele nieefektywnych procedur przechowywanych w naszej aplikacji, zawsze odkładamy, aby uczynić ją bardziej wydajną, dopóki nie będziemy mieli poważnego problemu z wydajnością bazy danych.Najczęściej wykonywana procedura składowana?

Teraz, myślę, że to naprawić, jeden po drugim, przez najczęściej wykonywane procedura przechowywana.

Jaki jest najlepszy sposób, aby dowiedzieć się, która procedura przechowywana jest najczęściej wykonywana?

Czy istnieje skrypt, który może pokazać, która procedura składowana jest najczęściej wykonywana?

Odpowiedz

23

Zastosowanie:

SELECT TOP 10 
     qt.TEXT AS 'SP Name', 
     SUBSTRING(qt.text, qs.statement_start_offset/2, CASE WHEN (qs.statement_end_offset = -1) THEN LEN(qt.text) ELSE (qs.statement_end_offset - qs.statement_start_offset)/2 END) AS actual_query, 
     qs.execution_count AS 'Execution Count', 
     qs.total_worker_time/qs.execution_count AS 'AvgWorkerTime', 
     qs.total_worker_time AS 'TotalWorkerTime', 
     qs.total_physical_reads AS 'PhysicalReads', 
     qs.creation_time 'CreationTime', 
     qs.execution_count/DATEDIFF(Second, qs.creation_time, GETDATE()) AS 'Calls/Second' 
    FROM sys.dm_exec_query_stats AS qs 
    CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt 
WHERE qt.dbid = (SELECT dbid 
        FROM sys.sysdatabases 
        WHERE name = '[your database name]') 
ORDER BY qs.total_physical_reads DESC 

Odniesienia: SQL SERVER – 2005 – Find Highest/Most Used Stored Procedure

+0

Można również wyodrębnić 'SUBSTRING (tekst, statement_start_offset/2, przypadek kiedy (statement_end_offset = -1), a następnie len (Tekst) indziej (statement_end_offset-statement_start_offset)/2 end)' dla aktualnego zapytania wewnątrz SP –

+0

@Remus: Dodano, dziękuję! –

+0

powinien to być SUBSTRING (qt.text, qs.statement_start_offset/2, CASE WHEN (qs.statement_end_offset = -1) THEN LEN (qt.text) ELSE (qs.statement_end_offset - qs.statement_start_offset)/2 END) AS actual_query, –

0

Typowa sytuacja ..

Uruchom analizator wydajności a następnie uruchomić aplikację ustawić kilka filtrów do przechwytywania wysokiej liczby czyta/zapisuje/skany itp ..

1

Szybki sposób na osiągnięcie tego celu uruchom program SQL Profiler, a następnie "pogrupuj" swój ślad według TextData.

  • Idź na swoje właściwości śladowe
  • W zakładce Selection wydarzenia, kliknij na Organizuj Kolumny ...
  • Kliknij TextData i przenieść go do obszarze „grupy”.

Możesz również chcieć oglądać tylko określone wydarzenia, takie jak zakończona partia SQL. Jeśli pamiętam, da ci to czas trwania i inne przydatne statystyki do grupowania/filtrowania według.

1

Kolejnym fantastycznym narzędziem jest Microsoft Performance Dashboard. link text