Sortuj. Sprawdź to zapytanie:
SELECT total_worker_time/execution_count AS AvgCPU
, total_worker_time AS TotalCPU
, total_elapsed_time/execution_count AS AvgDuration
, total_elapsed_time AS TotalDuration
, (total_logical_reads+total_physical_reads)/execution_count AS AvgReads
, (total_logical_reads+total_physical_reads) AS TotalReads
, execution_count
, SUBSTRING(st.TEXT, (qs.statement_start_offset/2)+1
, ((CASE qs.statement_end_offset WHEN -1 THEN datalength(st.TEXT)
ELSE qs.statement_end_offset
END - qs.statement_start_offset)/2) + 1) AS txt
, query_plan
FROM sys.dm_exec_query_stats AS qs
cross apply sys.dm_exec_sql_text(qs.sql_handle) AS st
cross apply sys.dm_exec_query_plan (qs.plan_handle) AS qp
ORDER BY 1 DESC
Spowoduje to wyświetlenie zapytań w pamięci podręcznej planu w kolejności zużytego procesora. Możesz uruchamiać to okresowo, jak w zadaniu agenta SQL, i wstawić wyniki do tabeli, aby upewnić się, że dane będą się utrzymywać po ponownym uruchomieniu.
Po przeczytaniu wyników prawdopodobnie uświadomisz sobie, dlaczego nie możemy skorelować tych danych bezpośrednio z indywidualną bazą danych. Po pierwsze, jedno zapytanie można również ukryć swój prawdziwy bazy rodzica wykonując sztuczki tak:
USE msdb
DECLARE @StringToExecute VARCHAR(1000)
SET @StringToExecute = 'SELECT * FROM AdventureWorks.dbo.ErrorLog'
EXEC @StringToExecute
Kwerenda będzie wykonywany w MSDB, ale to wyniki ankiety z AdventureWorks. Gdzie powinniśmy przypisać zużycie procesora?
Jest jeszcze gorzej, gdy:
- Dołącz pomiędzy wieloma bazami danych
- uruchomienia transakcji w wielu bazach danych i wysiłku blokujący obejmuje wiele baz
- Run SQL agenta zadania w msdb, że „praca” w MSDB, ale kopii zapasowych poszczególnych baz danych
To trwa. Dlatego ma sens, aby dostroić wydajność na poziomie zapytania zamiast na poziomie bazy danych.
W SQL Server 2008R2 Microsoft wprowadził funkcje zarządzania wydajnością i zarządzania aplikacjami, które pozwolą nam spakować pojedynczą bazę danych w dystrybuowalnym i dającym się wdrożyć pakiecie DAC, i są obiecującymi funkcjami, które ułatwiają zarządzanie wydajnością poszczególnych baz danych i ich aplikacje. Wciąż jednak nie robi tego, czego szukasz.
Aby uzyskać więcej takich informacji, sprawdź numer T-SQL repository at Toad World's SQL Server wiki (formerly at SQLServerPedia).
Zaktualizowano na 1/29, aby uwzględnić całkowitą liczbę zamiast tylko średnich.
Wybacz moją niewiedzę, ale jakie są jednostki AvgCPU i AvgDuration? – Portman
Milisekundy dla obu - milisekund czasu procesora i milisekund trwania. Mogą być różne, ponieważ zapytania mogą czekać na IO, blokady, klientów itp. Zmodyfikuję zapytanie, aby pobrać również sumy. (Chciałem powiedzieć, funty, ale nie mogłem zachować wirtualnej prostej twarzy.) –