Serwisanci dostępni teraz · czynne całą dobę, także w weekendy i świętaWarszawa i okolice · dojazd bezpłatny
Darmowa diagnoza laptopa
Darmowa diagnoza laptopa
Dojazd do klienta bezpłatnie
Dojazd do klienta bezpłatnie
Laptopy zastępcze bezpłatnie
Laptopy zastępcze bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie

SYS.DM_EXEC_FUNCTION_STATS

Termin Definicja
SYS.DM_EXEC_FUNCTION_STATS

sys.dm_exec_function_stats pokazuje statystyki wykonania funkcji skalarnych zdefiniowanych przez użytkownika.

Rola widoku sys.dm_exec_function_stats w SQL Server

sys.dm_exec_function_stats jest dynamicznym widokiem zarządzania silnika Microsoft SQL Server, przeznaczonym do obserwowania zagregowanych statystyk wykonania funkcji znajdujących się w pamięci podręcznej planów. Nie jest to katalog definicji obiektów ani historia wszystkich uruchomień zapisanych trwale w bazie danych. Widok pokazuje informacje dostępne dla funkcji, których plan wykonania pozostaje aktualnie w pamięci podręcznej.

Wynik zawiera jeden wiersz dla każdego buforowanego planu funkcji. W praktyce oznacza to, że liczba wierszy nie musi odpowiadać liczbie wszystkich funkcji utworzonych w bazie. Funkcja może nie pojawić się w widoku, jeżeli nie została jeszcze wykonana, jej plan nie został zapisany w pamięci podręcznej albo został z niej usunięty. Gdy SQL Server usuwa plan funkcji z cache, odpowiadający mu wiersz również znika.

Jakie funkcje i dane obejmuje ten mechanizm

Widok dotyczy przede wszystkim funkcji skalarnych, czyli funkcji zwracających pojedynczą wartość, takich jak funkcje T-SQL typu FN. Obejmuje także skalarne funkcje CLR oraz funkcje korzystające z mechanizmów In-Memory OLTP, o ile ich wykonanie i plan są raportowane przez daną wersję silnika. Nie służy natomiast do analizowania funkcji zwracających tabelę. Nie pokazuje również funkcji skalarnych, które zostały przekształcone przez mechanizm Scalar UDF Inlining, ponieważ po takim przekształceniu ich wykonanie jest włączane do planu zapytania nadrzędnego.

Najważniejsze kolumny opisują identyfikację funkcji i zakres zebranych pomiarów. database_id wskazuje bazę danych, w której znajduje się funkcja, a object_id identyfikuje jej obiekt. Kolumna type_desc może wskazywać typ SQL_SCALAR_FUNCTION. cached_time określa moment dodania planu do cache, last_execution_time czas ostatniego zakończonego wykonania, a execution_count liczbę wykonań od ostatniej kompilacji planu.

Interpretacja czasu, CPU i operacji wejścia-wyjścia

Kolumny zaczynające się od total_ pokazują wartości narastające od kompilacji funkcji lub utworzenia aktualnego planu w pamięci. total_worker_time przedstawia łączny czas procesora zużyty przez wykonania funkcji i jest raportowany w mikrosekundach. last_worker_time, min_worker_time oraz max_worker_time opisują odpowiednio ostatnie, minimalne i maksymalne zużycie CPU podczas pojedynczego wykonania. Analogiczny zestaw kolumn dotyczy czasu trwania: total_elapsed_time, last_elapsed_time, min_elapsed_time i max_elapsed_time.

Do oceny obciążenia pamięci masowej i buforów służą między innymi total_physical_reads, last_physical_reads, min_physical_reads i max_physical_reads, a także kolumny dotyczące odczytów logicznych oraz zapisów logicznych. Czas trwania obejmuje pełny czas wykonania obserwowany przez silnik, dlatego może być większy niż sam czas CPU, na przykład przy oczekiwaniu na blokadę, dane lub zasoby wejścia-wyjścia. Średni czas można obliczyć jako total_elapsed_time / execution_count, ale taki wynik należy interpretować razem z liczbą wykonań i informacją o ponownej kompilacji planu.

Statystyki nie obejmują zapytań, które są jeszcze wykonywane. Reprezentują zakończone wykonania, więc kolejne odczyty widoku mogą dawać różne wyniki. Wartości nie są wieczne: restart instancji, czyszczenie pamięci podręcznej, ponowna kompilacja albo usunięcie planu z cache zmienia zakres pomiaru. Z tego powodu widok nadaje się do bieżącej diagnostyki i porównań w określonym okresie, lecz sam nie zastępuje trwałego systemu monitorowania.

Przykładowe zapytanie i ograniczenia uprawnień

Podstawową analizę można rozpocząć od wyszukania funkcji o największym średnim czasie wykonania:

SELECT TOP (10)
d.database_id,
d.object_id,
OBJECT_NAME(d.object_id, d.database_id) AS function_name,
d.cached_time,
d.last_execution_time,
d.execution_count,
d.total_elapsed_time,
d.total_elapsed_time / NULLIF(d.execution_count, 0) AS avg_elapsed_time,
d.total_worker_time
FROM sys.dm_exec_function_stats AS d
ORDER BY avg_elapsed_time DESC;

NULLIF chroni obliczenie przed dzieleniem przez zero, choć dla poprawnie zarejestrowanego wiersza licznik wykonań powinien być dodatni. Kolumny sql_handle i plan_handle pozwalają powiązać wynik z innymi widokami dynamicznymi, w szczególności z sys.dm_exec_query_stats oraz sys.dm_exec_cached_plans. Na SQL Server dostęp do tego widoku wymaga odpowiednich uprawnień stanu serwera; w SQL Server 2022 i nowszych dokumentacja wskazuje uprawnienie VIEW SERVER PERFORMANCE STATE. Sam odczyt statystyk nie zmienia funkcji ani jej planu wykonania.

+48 22 100 48 29Zadzwoń teraz · serwisant w 1 godzinę