Megosztás a következőn keresztül:


sys.dm_exec_query_profiles (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL-adatbázis a Microsoft Fabricben

Valós idejű lekérdezés előrehaladását figyeli, amíg a lekérdezés végrehajtás alatt van. Például ezt a DMV-t használd arra, hogy megállapítsd, a lekérdezés melyik része lassú. Csatlakoztasd ehhez a DMV-hez más rendszer-DMV-kkel a leírásmezőben jelölt oszlopok segítségével. Vagy csatlakoztasd ezt a DMV-t más teljesítményszámlálókkal (például Performance Monitor, xperf) az időbélyeg oszlopok használatával.

Visszaadott tábla

A visszaadott számlálók operátorként, szálonkénti arányban vannak. Az eredmények dinamikusak, és nem egyeznek meg a meglévő opciók eredményeivel, SET STATISTICS XML ON például amelyek csak a lekérdezés befejezése után generálnak kimenetet.

Oszlop név Adattípus Description
munkamenet_azonosító smallint Azonosítja azt az ülést, amelyben ez a lekérdezés fut. Hivatkozások dm_exec_sessions.session_id.
kérés_azonosítója int Azonosítja a célkérést. Hivatkozások dm_exec_sessions.request_id.
sql_handle varbinary(64) Ez egy token, amely egyedileg azonosítja azt a batch vagy tárolt eljárást, amelynek a lekérdezés része. Hivatkozások: dm_exec_query_stats.sql_handle.
plan_handle varbinary(64) Ez egy token, amely egyedien azonosítja egy lekérdezés végrehajtási tervet egy olyan tételre, amely már teljesített, és a terve a terv gyorsítótárában van, vagy éppen teljesít. Hivatkozások dm_exec_query_stats.plan_handle.
physical_operator_name nvarchar(256) Fizikai operátor neve.
node_id int Azonosít egy operátor csomópontot a lekérdezési fában.
thread_id int Megkülönbözteti a szálakat (párhuzamos lekérdezés esetén), amelyek ugyanahhoz a lekérdezési operátor csomóponthoz tartoznak.
feladat cím varbinary(8) Azonosítja az SQLOS feladatot, amit ez a szál használ. Hivatkozások dm_os_tasks.task_address.
row_count bigint Az operátor által eddig visszaadott sorok száma.
rewind_count bigint Eddig hány visszatekerés.
rebind_count bigint Eddig hány újrakötés.
end_of_scan_count bigint Eddig hány végi vizsgálat.
estimate_row_count bigint Becsült sorszám. Hasznos lehet összehasonlítani estimated_row_count a tényleges row_count között.
first_active_time bigint Az idő, milliszekundumokban, amikor először hívták az operátort.
last_active_time bigint Az idő, milliszekundumokban, amikor utoljára hívták az operátort.
open_time bigint Időbélyeg nyitva (milliszekundumokban).
first_row_time bigint Időbélyeg, amikor az első sor megnyílt (milliszekundumokban).
last_row_time bigint Időbélyeg, amikor az utolsó sort megnyitották (milliszekundumokban).
close_time bigint Időbélyeg, amikor közel van (ezredmásodpercekben).
elapsed_time_ms bigint A célcsomópont eddigi műveletei által használt összes eltelt idő (milliszekundumokban).
cpu_time_ms bigint A célcsomópont eddigi műveletei által használt teljes CPU idő (milliszekundumokban).
database_id smallint Az adatbázis azonosítója, amely tartalmazza azt az objektumot, amelyen az olvasás és írás zajlik.
object_id int Az objektum azonosítója, amelyen az olvasás és írás zajlik. Hivatkozások sys.objects.object_id.
index_id int Az indexhez (ha van ilyen), amelyhez a sorhalmaz nyitva kerül.
scan_count bigint Eddig szám táblázat/index vizsgálat.
logical_read_count bigint Eddig logikus olvasmányok száma.
physical_read_count bigint Eddig fizikai olvasások száma.
read_ahead_count bigint Eddig több előreolvasó volt.
write_page_count bigint Eddig hány oldalírás történt a kiömlés miatt.
lob_logical_read_count bigint Eddig hány LOB logikai olvasmány.
lob_physical_read_count bigint Eddig hány LOB fizikai olvasmány.
lob_read_ahead_count bigint Eddig szám az LOB előreolvasó.
segment_read_count int Eddig előre előre olvasott szegmensek száma.
segment_skip_count int Eddig kihagyott szegmensek száma.
actual_read_row_count bigint A sorok száma, amelyet egy operátor olvasott el, mielőtt a maradék predikátumot alkalmazták.
estimated_read_row_count bigint Vonatkozik a következőkre: Az SQL Server 2016 (13.x) SP1-től kezdve.
Azok száma, amelyeket az operátor becslések szerint olvasott, mielőtt a maradék predikátumot alkalmazták.

Általános megjegyzések

Ha a lekérdezési terv csomópontján nincs I/O, az összes I/O-hoz kapcsolódó számláló NULL-ra van állítva.

Az I/O-hoz kapcsolódó számlálók, amelyeket ez a DMV jelentett, részletesebbek, mint az alábbi két módon jelentett SET STATISTICS IO :

  • SET STATISTICS IO csoportosítja az összes I/O számlálóit egy adott táblán. Ezzel a DMV-vel külön számlálókat kapsz minden csomóponthoz a lekérdezési tervben, amely az asztalhoz I/O-t végez.

  • Ha párhuzamos szkennelés történik, ez a DMV minden párhuzamos szálra számlálókat jelent, amelyek a vizsgálaton dolgoznak.

Az SQL Server 2016 (13.x) SP1-től kezdve a szabványos lekérdezésvégrehajtási statisztikai profilozási infrastruktúra párhuzamosan létezik egy könnyű lekérdezésvégrehajtási statisztikai profilozó infrastruktúrával. SET STATISTICS XML ON és SET STATISTICS PROFILE ON mindig a szabványos lekérdezésvégrehajtási statisztikai profilozási infrastruktúrát használjuk. Ahhoz sys.dm_exec_query_profiles , hogy feltöltsük, az egyik lekérdezésprofilozó infrastruktúrát be kell kapcsolni. További információért lásd: lekérdezésprofilozási infrastruktúra.

Megjegyzés:

A vizsgált lekérdezésnek a lekérdezés profilozási infrastruktúrájának bekapcsolása után kell elindulnia, így ha a lekérdezés elindulása után engedélyezzük, nem ad eredményt .sys.dm_exec_query_profiles További információért a lekérdezési profilozási infrastruktúrák engedélyezéséről lásd: Lekérdezési profilozási infrastruktúra.

Permissions

  • SQL Server és Azure SQL Managed Instance esetén VIEW DATABASE STATE engedély és tagság szükséges az db_owner adatbázis szerepéhez.
  • Azure SQL Database Premium Tiers-en az adatbázisban szükséges engedély VIEW DATABASE STATE .
  • Azure SQL Database Basic, S0 és S1 szolgáltatási céloknál, valamint rugalmas poolok adatbázisainál a szerveradmin vagy Microsoft Entra admin fiók szükséges. Minden más SQL Database szolgáltatás célnál az VIEW DATABASE STATE engedély az adatbázisban szükséges.

Engedélyek az SQL Server 2022-hez és újabb verziókhoz

A VIEW DATABASE PERFORMANCE STATE engedélyre van szüksége az adatbázisban.

Példák

1. lépés: Jelentkezz be egy olyan ülésre, amelyben azt a lekérdezést tervezed, amellyel elemezni sys.dm_exec_query_profilesfogsz. A profilozás lekérdezésének konfigurálásához használjuk SET STATISTICS PROFILE ON. Futtatd le a lekérdezésedet ugyanebben az ülésben.

--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 

2. lépés: Jelentkezz be egy második ülésre, amely eltér attól, amelyben a lekérdezésed fut.

Az alábbi állítás összefoglalja a jelenleg 54. ülésen futó lekérdezés előrehaladását. Ehhez kiszámítja az összes szál kimeneti sorainak összesített számát minden csomóponthoz, és összehasonlítja azt az adott csomópont becsült kimeneti sorszámával.

--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;  

Lásd még:

dinamikus felügyeleti nézetek és függvények (Transact-SQL)
végrehajtással kapcsolatos dinamikus felügyeleti nézetek és függvények (Transact-SQL)