Udostępnij za pomocą


sys.dm_exec_query_profiles (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBaza danych SQL w usłudze Microsoft Fabric

Monitoruje postęp zapytań w czasie rzeczywistym podczas wykonywania zapytania. Na przykład użyj tego DMV, aby określić, która część zapytania działa wolno. Dołącz do tego DMV z innymi systemowymi DMV, używając kolumn wskazanych w polu opisu. Albo dołącz do tego DMV z innymi licznikami wydajności (takimi jak Performance Monitor, xperf), korzystając z kolumn znaczników czasu.

Zwracana tabela

Liczniki zwracane są dla operatora na wątek. Wyniki są dynamiczne i nie pokrywają się z wynikami istniejących opcji, takich jak SET STATISTICS XML ON które generują wyjście dopiero po zakończeniu zapytania.

Nazwa kolumny Typ danych Description
session_id smallint Identyfikuje sesję, w której to zapytanie jest wykonywane. Źródła dm_exec_sessions.session_id.
identyfikator_żądania int Identyfikuje żądanie docelowe. Referencje dm_exec_sessions.request_id.
sql_handle varbinary(64) Jest tokenem, który jednoznacznie identyfikuje procedurę wsadową lub przechowywaną, której jest częścią zapytanie. Przypisy dm_exec_query_stats.sql_handle.
plan_handle varbinary(64) Jest tokenem, który jednoznacznie identyfikuje plan wykonania zapytań dla partii, która została wykonana, a jej plan znajduje się w pamięci podręcznej planu lub jest obecnie wykonywana. Odwołania dm_exec_query_stats.plan_handle.
physical_operator_name nvarchar(256) Fizyczne imię operatora.
node_id int Identyfikuje węzeł operatora w drzewie zapytań.
thread_id int Rozróżnia wątki (dla zapytania równoległego) należące do tego samego węzła operatora zapytania.
adres zadania varbinary(8) Identyfikuje zadanie SQLOS, którego używa ten wątek. Odwołania dm_os_tasks.task_address.
row_count bigint Liczba wierszy zwróconych przez operatora do tej pory.
rewind_count bigint Liczba przewijanych przewijań do tej pory.
rebind_count bigint Liczba rebindów do tej pory.
end_of_scan_count bigint Liczba zakończonych badań do tej pory.
estimate_row_count bigint Szacowana liczba wierszy. Może być przydatne porównanie estimated_row_count z rzeczywistym row_count.
first_active_time bigint Czas, w milisekundach, kiedy operator został po raz pierwszy wezwany.
last_active_time bigint Czas, w milisekundach, kiedy operator był ostatnio wzywany.
open_time bigint Znacznik czasu przy otwarciu (w milisekundach).
first_row_time bigint Znacznik czasu otwarcia pierwszego wiersza (w milisekundach).
last_row_time bigint Znacznik czasu od otwarcia ostatniego wiersza (w milisekundach).
close_time bigint Znacznik czasu przy zamknięciu (w milisekundach).
czas_trwania_ms bigint Całkowity upłyniony czas (w milisekundach) wykorzystany przez operacje docelowego węzła do tej pory.
cpu_time_ms bigint Całkowity czas CPU (w milisekundach) zużyty przez operacje węzła docelowego do tej pory.
id_bazy_danych smallint Identyfikator bazy danych, która zawiera obiekt, na którym wykonywane są odczyty i zapisy.
object_id int Identyfikator obiektu, na którym wykonywane są odczyty i zapisy. Bibliografia sys.objects.object_id.
index_id int Indeks (jeśli występuje), przeciwko któremu otwiera się zestaw wierszy.
scan_count bigint Liczba skanów tabel/indeksów do tej pory.
logical_read_count bigint Liczba logicznych odczytów do tej pory.
physical_read_count bigint Liczba fizycznych odczytów do tej pory.
read_ahead_count bigint Liczba odczytów do tej pory.
write_page_count bigint Liczba do tej pory napisanych stron przez rozlanie.
lob_logical_read_count bigint Liczba logicznych odczytów LOB do tej pory.
lob_physical_read_count bigint Liczba fizycznych odczytów LOB do tej pory.
lob_read_ahead_count bigint Liczba odczytów LOB do tej pory.
segment_read_count int Liczba odczytów segmentów do tej pory.
segment_skip_count int Liczba segmentów pominiętych do tej pory.
actual_read_row_count bigint Liczba wierszy odczytanych przez operatora przed zastosowaniem predykatu rezydualnego.
estimated_read_row_count bigint Dotyczy do: Zaczynając od SQL Server 2016 (13.x) SP1.
Liczba wierszy szacowanych do odczytania przez operatora przed zastosowaniem predykatu resztkowego.

Uwagi ogólne

Jeśli węzeł planu zapytań nie ma żadnego I/O, wszystkie liczniki związane z I/O są ustawione na NULL.

Liczniki związane z I/O zgłaszane przez ten DMV są bardziej szczegółowe niż te SET STATISTICS IO zgłaszane w następujących dwóch aspektach:

  • SET STATISTICS IO grupuje liczniki wszystkich wejść/wyjścia do danej tabeli razem. Dzięki temu DMV otrzymasz osobne liczniki dla każdego węzła w planie zapytania, który wykonuje operacje I/O do tabeli.

  • Jeśli jest skanowanie równoległe, DMV raportuje liczniki dla każdego wątku równoległego pracującego podczas skanowania.

Począwszy od SQL Server 2016 (13.x) SP1, standardowa infrastruktura profilowania statystyk wykonywania zapytań istnieje równolegle z lekką infrastrukturą profilowania statystyk wykonywania zapytań. SET STATISTICS XML ON i SET STATISTICS PROFILE ON zawsze korzystaj ze standardowej infrastruktury profilowania statystyk wykonywania zapytań. Aby sys.dm_exec_query_profiles zostać wypełnionym, jedna z infrastruktur profilowania zapytań musi być włączona. Aby uzyskać więcej informacji, zobacz Infrastruktura profilowania zapytań.

Uwaga / Notatka

Badanie zapytania musi rozpocząć się po włączeniu infrastruktury profilowania zapytań, ponieważ włączenie go po rozpoczęciu zapytania nie przyniesie wyników w sys.dm_exec_query_profiles. Aby uzyskać więcej informacji o tym, jak włączyć infrastrukturę profilowania zapytań, zobacz Infrastruktura profilowania zapytań.

Permissions

  • Na SQL Server i Azure SQL Managed Instance wymaga VIEW DATABASE STATE uprawnień i członkostwa w roli bazy db_owner danych.
  • W Azure SQL Database Premium Tiers wymaga VIEW DATABASE STATE to uprawnień do bazy danych.
  • W celach usług Azure SQL Database Basic, S0 i S1 oraz dla baz danych w elastycznych pulach wymagane jest konto administratora serwera lub Microsoft Entra . We wszystkich pozostałych celach usług SQL Database wymagane jest uprawnienia VIEW DATABASE STATE w bazie danych.

Uprawnienia dla programu SQL Server 2022 i nowszych

Wymaga uprawnienia WYŚWIETL STAN WYDAJNOŚCI BAZY DANYCH w bazie danych.

Przykłady

Krok 1: Zaloguj się do sesji, w której planujesz uruchomić zapytanie, które będziesz analizować sys.dm_exec_query_profiles. Aby skonfigurować zapytanie do profilowania, użyj SET STATISTICS PROFILE ON. Uruchom swoje zapytanie w tej samej sesji.

--Configure query for profiling with sys.dm_exec_query_profiles  
SET STATISTICS PROFILE ON;  
GO  

--Or enable query profiling globally under SQL Server 2016 SP1 or above (not needed in SQL Server 2019)  
DBCC TRACEON (7412, -1);  
GO 
  
--Next, run your query in this session, or in any other session if query profiling has been enabled globally 

Krok 2: Zaloguj się do drugiej sesji, która różni się od tej, w której odbywa się Twoje zapytanie.

Poniższe zdanie podsumowuje postępy zapytania aktualnie prowadzonego w sesji 54. Aby to zrobić, oblicza łączną liczbę wierszy wyjściowych ze wszystkich wątków dla każdego węzła i porównuje ją z szacowaną liczbą wierszy wyjściowych dla danego węzła.

--Run this in a different session than the session in which your query is running. 
--Note that you may need to change session id 54 below with the session id you want to monitor.
SELECT node_id,physical_operator_name, SUM(row_count) row_count, 
  SUM(estimate_row_count) AS estimate_row_count, 
  CAST(SUM(row_count)*100 AS float)/SUM(estimate_row_count)  
FROM sys.dm_exec_query_profiles   
WHERE session_id=54
GROUP BY node_id,physical_operator_name  
ORDER BY node_id;  

Zobacz też

Dynamiczne widoki zarządzania i funkcje (Transact-SQL)
Dynamiczne widoki zarządzania i funkcje związane z wykonywaniem (Transact-SQL)