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


Lekérdezésprofil-kezelő infrastruktúra

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

Az SQL Server adatbázismotorja hozzáférést biztosít a lekérdezés-végrehajtási tervek futásidejű információihoz. A teljesítményproblémák esetén az egyik legfontosabb művelet a végrehajtás alatt álló számítási feladat és az erőforrás-használat használatának pontos megértése. Ezért fontos a tényleges végrehajtási tervhez való hozzáférés.

Bár a lekérdezések befejezése előfeltétele a tényleges lekérdezéstervek rendelkezésre állásának, élő lekérdezési statisztikák valós idejű elemzéseket biztosíthatnak a lekérdezések végrehajtási folyamatáról, mivel az adatok lekérdezésterv-operátortól egy másikba áramlik. Az élő lekérdezési terv megjeleníti a lekérdezés általános állapotát és az operátorszintű futtatási idő végrehajtási statisztikáit, például a létrehozott sorok számát, az eltelt időt, az operátor előrehaladását stb. Mivel ezek az adatok valós időben érhetők el anélkül, hogy várniuk kellene a lekérdezés befejezésére, ezek a végrehajtási statisztikák rendkívül hasznosak a lekérdezési teljesítményproblémák, például a hosszú ideig futó lekérdezések és a határozatlan ideig futó és soha nem befejezett lekérdezések hibakereséséhez.

A szabványos lekérdezésvégrehajtási statisztikák profilkészítési infrastruktúrája

A lekérdezés-végrehajtási statisztikák profilinfrastruktúrájának vagy a szabványos profilkészítésnek engedélyeznie kell a végrehajtási tervekkel kapcsolatos információk gyűjtését, nevezetesen a sorok számát, a PROCESSZOR- és az I/O-használatot. A cél munkamenet végrehajtási tervadatainak gyűjtésére szolgáló alábbi módszerek a szabványos profilkészítési infrastruktúrát használják:

Note

Ha bejelöli az Élő lekérdezési statisztikák belefoglalása gombot az SQL Server Management Studióban, a szabványos profilkészítési infrastruktúrát használja. Az SQL Server későbbi verzióiban, ha az egyszerűsített profilkészítési infrastruktúra engedélyezve van, akkor élő lekérdezési statisztikák használják a szokásos profilkészítés helyett, ha a Tevékenységfigyelőn keresztül tekintik meg, vagy közvetlenül kérdezik le a sys.dm_exec_query_profiles DMV-t.

A végrehajtási terv adatainak globális gyűjtésének alábbi módszerei minden munkamenethez a szabványos profilkészítési infrastruktúrát használják:

Az eseményt használó query_post_execution_showplan kiterjesztett esemény-munkamenet futtatásakor a sys.dm_exec_query_profiles DMV is fel lesz töltve, amely lehetővé teszi az élő lekérdezési statisztikákat az összes munkamenethez a Tevékenységfigyelő használatával vagy a DMV közvetlen lekérdezésével. További információ: Live Query Statistics.

Az egyszerűsített lekérdezésvégrehajtási statisztikák profilkészítési infrastruktúrája

Az SQL Server 2014 (12.x) SP2 és az SQL Server 2016 (13.x) verziótól kezdve egy új egyszerűsített lekérdezés-végrehajtási statisztikai profilkészítési infrastruktúra, vagy egyszerűsített profilkészítési került bevezetésre.

Note

Az egyszerűsített profilkészítés nem támogatja a natívan lefordított tárolt eljárásokat.

Egyszerűsített lekérdezésvégrehajtási statisztikák profilkészítési infrastruktúra v1

A következőkre vonatkozik: SQL Server 2014 (12.x) SP2 és SQL Server 2016 (13.x).

Az SQL Server 2014 (12.x) SP2 és az SQL Server 2016 (13.x) verziótól kezdve a végrehajtási tervekre vonatkozó információk gyűjtésének teljesítményterhelése az egyszerűsített profilkészítés bevezetésével csökkent. A szabványos profilkészítéstől eltérően az egyszerűsített profilkészítés nem gyűjt cpu-futtatókörnyezeti adatokat. Az egyszerűsített profilkészítés azonban továbbra is gyűjti a sorok számát és az I/O-használati adatokat.

Egy új query_thread_profile kiterjesztett eseményt is bevezettek, amely egyszerűsített profilkészítést használ. Ez a kiterjesztett esemény operátoronkénti végrehajtási statisztikákat tesz elérhetővé, így több információt kaphat az egyes csomópontok és szálak teljesítményéről. A kiterjesztett eseményt használó minta munkamenet az alábbi példához hasonlóan konfigurálható:

CREATE EVENT SESSION [NodePerfStats] ON SERVER
ADD EVENT sqlserver.query_thread_profile
    (
    ACTION (sqlos.scheduler_id,
            sqlserver.database_id,
            sqlserver.is_system,
            sqlserver.plan_handle,
            sqlserver.query_hash_signed,
            sqlserver.query_plan_hash_signed,
            sqlserver.server_instance_name,
            sqlserver.session_id,
            sqlserver.session_nt_username,
            sqlserver.sql_text)
    )
ADD TARGET package0.ring_buffer (SET max_memory = (25600))
WITH
(
        MAX_MEMORY = 4096 KB,
        EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
        MAX_DISPATCH_LATENCY = 30 SECONDS,
        MAX_EVENT_SIZE = 0 KB,
        MEMORY_PARTITION_MODE = NONE,
        TRACK_CAUSALITY = OFF,
        STARTUP_STATE = OFF
);

Note

A lekérdezésprofilozás teljesítményével kapcsolatos további információkért tekintse meg a Fejlesztők választása: Lekérdezés előrehaladása – bármikor, bárholcímű blogbejegyzést.

Az eseményt használó query_thread_profile kiterjesztett esemény-munkamenet futtatásakor a sys.dm_exec_query_profiles DMV is ki lesz töltve egyszerűsített profilkészítéssel, amely lehetővé teszi az összes munkamenet élő lekérdezési statisztikáit, a Tevékenységfigyelő használatával vagy a DMV közvetlen lekérdezésével.

Egyszerűsített lekérdezésvégrehajtási statisztikák profilkészítési infrastruktúra v2

A következőkre vonatkozik: SQL Server 2016 (13.x) SP1 és SQL Server 2017 (14.x).

Az SQL Server 2016 (13.x) SP1 az egyszerűsített profilkészítés módosított verzióját tartalmazza minimális többletterheléssel. A könnyű profilkészítés globálisan is engedélyezhető a 7412 nyomkövetési jelzővel a korábban a Vonatkozik: részben megadott verziókhoz. Bevezetünk egy új DMF-sys.dm_exec_query_statistics_xml-et, amely visszaadja a lekérdezés-végrehajtási tervet a folyamatban lévő kérelmekhez.

Az SQL Server 2016 (13.x) SP2 CU3 és az SQL Server 2017 (14.x) CU11 rendszertől kezdve, ha az egyszerűsített profilkészítés globálisan nincs engedélyezve, akkor az új USE HINT lekérdezési tipp argumentumot QUERY_PLAN_PROFILE használhatja az egyszerűsített profilkészítés lekérdezési szinten történő engedélyezéséhez bármely munkamenethez. Amikor az új tippet tartalmazó lekérdezés befejeződik, egy új query_plan_profile kiterjesztett esemény is kimenet, amely a kiterjesztett eseményhez query_post_execution_showplan hasonló tényleges végrehajtási terv XML-ét biztosítja.

Note

A query_plan_profile kiterjesztett esemény egyszerűsített profilkészítést is használ, még akkor is, ha a lekérdezési tipp nincs használatban.

A kiterjesztett eseményt használó query_plan_profile minta munkamenet az alábbi példához hasonlóan konfigurálható:

CREATE EVENT SESSION [PerfStats_LWP_Plan] ON SERVER
ADD EVENT sqlserver.query_plan_profile
    (
    ACTION (sqlos.scheduler_id,
            sqlserver.database_id,
            sqlserver.is_system,
            sqlserver.plan_handle,
            sqlserver.query_hash_signed,
            sqlserver.query_plan_hash_signed,
            sqlserver.server_instance_name,
            sqlserver.session_id,
            sqlserver.session_nt_username,
            sqlserver.sql_text)
    )
ADD TARGET package0.ring_buffer (SET max_memory = (25600))
WITH
(
        MAX_MEMORY = 4096 KB,
        EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
        MAX_DISPATCH_LATENCY = 30 SECONDS,
        MAX_EVENT_SIZE = 0 KB,
        MEMORY_PARTITION_MODE = NONE,
        TRACK_CAUSALITY = OFF,
        STARTUP_STATE = OFF
);

Egyszerűsített lekérdezésvégrehajtási statisztikák profilkészítési infrastruktúra v3

A következővonatkozik: SQL Server 2019 (15.x) és újabb verziók, valamint az Azure SQL Database

Az SQL Server 2019 (15.x) és az Azure SQL Database az egyszerűsített profilkészítés újonnan módosított verzióját tartalmazza, amely az összes végrehajtáshoz gyűjti a sorszámadatokat. Az egyszerűsített profilkészítés alapértelmezés szerint engedélyezve van az SQL Server 2019 -ben (15.x) és az Azure SQL Database-ben. Az SQL Server 2019 (15.x) és újabb verzióiban a 7412 nyomkövetési jelzőnek nincs hatása. Az egyszerűsített profilkészítés az adatbázis szintjén letiltható az LIGHTWEIGHT_QUERY_PROFILINGadatbázis hatókörébe tartozó konfigurációval: ALTER DATABASE SCOPED CONFIGURATION SET LIGHTWEIGHT_QUERY_PROFILING = OFF;.

Bevezetünk egy új DMF-sys.dm_exec_query_plan_stats, amely a legtöbb lekérdezés legutóbbi ismert tényleges végrehajtási tervének megfelelőt adja vissza, és utolsó lekérdezési terv statisztikájánaknevezik. Az utolsó lekérdezésterv-statisztikák az adatbázis szintjén engedélyezhetők az LAST_QUERY_PLAN_STATSadatbázis hatókörébe tartozó konfigurációval: ALTER DATABASE SCOPED CONFIGURATION SET LAST_QUERY_PLAN_STATS = ON;.

Egy új query_post_execution_plan_profile kiterjesztett esemény egy egyszerű profilkészítésen alapuló tényleges végrehajtási tervnek megfelelőt gyűjt, ellentétben query_post_execution_showplana standard profilkészítést használókkal. Az SQL Server 2017 (14.x) cu14-től kezdődően ezt az eseményt is kínálja. A kiterjesztett eseményt használó query_post_execution_plan_profile minta munkamenet az alábbi példához hasonlóan konfigurálható:

CREATE EVENT SESSION [PerfStats_LWP_All_Plans] ON SERVER
ADD EVENT sqlserver.query_post_execution_plan_profile
    (
    ACTION (sqlos.scheduler_id,
            sqlserver.database_id,
            sqlserver.is_system,
            sqlserver.plan_handle,
            sqlserver.query_hash_signed,
            sqlserver.query_plan_hash_signed,
            sqlserver.server_instance_name,
            sqlserver.session_id,
            sqlserver.session_nt_username,
            sqlserver.sql_text)
    )
ADD TARGET package0.ring_buffer (SET max_memory = (25600))
WITH
(
        MAX_MEMORY = 4096 KB,
        EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
        MAX_DISPATCH_LATENCY = 30 SECONDS,
        MAX_EVENT_SIZE = 0 KB,
        MEMORY_PARTITION_MODE = NONE,
        TRACK_CAUSALITY = OFF,
        STARTUP_STATE = OFF
);

1. példa – Kiterjesztett esemény munkamenet standard profilkészítéssel

CREATE EVENT SESSION [QueryPlanOld] ON SERVER
ADD EVENT sqlserver.query_post_execution_showplan
    (
    ACTION (sqlos.task_time,
            sqlserver.database_id,
            sqlserver.database_name,
            sqlserver.query_hash_signed,
            sqlserver.query_plan_hash_signed,
            sqlserver.sql_text)
    )
ADD TARGET package0.event_file
    (
    SET filename = N'C:\Temp\QueryPlanStd.xel'
    )
WITH
(
        MAX_MEMORY = 4096 KB,
        EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
        MAX_DISPATCH_LATENCY = 30 SECONDS,
        MAX_EVENT_SIZE = 0 KB,
        MEMORY_PARTITION_MODE = NONE,
        TRACK_CAUSALITY = OFF,
        STARTUP_STATE = OFF
);

2. példa – Bővített esemény munkamenete egyszerűsített profilkészítéssel

CREATE EVENT SESSION [QueryPlanLWP] ON SERVER
ADD EVENT sqlserver.query_post_execution_plan_profile
    (
    ACTION (sqlos.task_time,
            sqlserver.database_id,
            sqlserver.database_name,
            sqlserver.query_hash_signed,
            sqlserver.query_plan_hash_signed,
            sqlserver.sql_text)
    )
ADD TARGET package0.event_file
    (
    SET filename = N'C:\Temp\QueryPlanLWP.xel'
    )
WITH
(
        MAX_MEMORY = 4096 KB,
        EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
        MAX_DISPATCH_LATENCY = 30 SECONDS,
        MAX_EVENT_SIZE = 0 KB,
        MEMORY_PARTITION_MODE = NONE,
        TRACK_CAUSALITY = OFF,
        STARTUP_STATE = OFF
);

Lekérdezésprofilozási infrastruktúra használati útmutatója

Az alábbi táblázat összefoglalja azokat a műveleteket, amelyek lehetővé teszik a standard profilkészítést vagy az egyszerűsített profilkészítést globálisan (kiszolgálószinten) vagy egyetlen munkamenetben. Tartalmazza azt a legkorábbi verziót is, amelyhez a művelet elérhető.

Scope Standard profilkészítés Egyszerűsített profilkészítés
Global Bővített esemény-munkamenet az query_post_execution_showplan XE-vel; Az SQL Server 2012-től kezdve (11.x) Nyomkövetési jelző 7412; Az SQL Server 2016 (13.x) SP1-től kezdve
Global SQL Trace és SQL Server Profiler a nyomkövetési Showplan XML eseménysel Bővített esemény-munkamenet az query_thread_profile XE-vel; Az SQL Server 2014 (12.x) SP2-vel kezdve
Global N/A Bővített esemény-munkamenet az query_post_execution_plan_profile XE-vel; Az SQL Server 2017 (14.x) CU14 és az SQL Server 2019 (15.x) verziótól kezdve
Session Használja a SET STATISTICS XML ON-t Használja a lekérdezési QUERY_PLAN_PROFILE tippet egy kiterjesztett esemény-munkamenettel együtt az query_plan_profile XE-vel; Az SQL Server 2016 (13.x) SP2 CU3 és az SQL Server 2017 (14.x) CU11 verziótól kezdve
Session Használja a SET STATISTICS PROFILE ON-t N/A
Session Válassza az Élő lekérdezési statisztika gombot az SSMS-ben; Az SQL Server 2014 (12.x) SP2-vel kezdve N/A

Remarks

Important

A sys.dm_exec_query_statistics_xmlhivatkozó figyelési tárolt eljárás végrehajtása során bekövetkező esetleges véletlenszerű hozzáférés-megsértés miatt ellenőrizze, hogy az KB 4078596 telepítve van-e az SQL Server 2016 (13.x) és az SQL Server 2017 (14.x) rendszerben.

Az egyszerűsített 2- és alacsony terhelésű profilkészítéstől kezdve minden olyan kiszolgáló, amely még nincs processzorhoz kötve, folyamatosan futtathat egyszerűsített profilkészítést, és lehetővé teszi az adatbázis-szakemberek számára, hogy bármikor bármilyen futó végrehajtásra koppinthassanak, például az Activity Monitor használatával vagy közvetlenül a lekérdezéssel sys.dm_exec_query_profiles, és lekérjék a lekérdezési tervet futásidejű statisztikákkal.

A lekérdezésprofilozás teljesítményével kapcsolatos további információkért tekintse meg a Fejlesztők választása: Lekérdezés előrehaladása – bármikor, bárholcímű blogbejegyzést.

Az egyszerűsített profilkészítést használó kiterjesztett események a standard profilkészítésből származó információkat használják, ha a szabványos profilkészítési infrastruktúra már engedélyezve van. Fut például egy kiterjesztett esemény munkamenet query_post_execution_showplan használatával, és elindul egy másik munkamenet query_post_execution_plan_profile használatával. A második munkamenet továbbra is a szabványos profilkészítés adatait használja.

Note

Az SQL Server 2017 -en (14.x) az egyszerűsített profilkészítés alapértelmezés szerint ki van kapcsolva, de aktiválódik egy kiterjesztett eseménykövetés query_post_execution_plan_profile indításakor, majd a nyomkövetés leállításakor ismét inaktiválódik. Ennek következtében, ha az SQL Server 2017 (14.x) példányon gyakran elindulnak és leállnak a kiterjesztett eseménykövetések query_post_execution_plan_profile, a 7412-es nyomkövetési jelzővel globális szinten aktiválnia kell az egyszerűsített profilkészítést, hogy elkerülje az ismétlődő aktiválási/deaktiválási többletterhelést.