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


sys.dm_exec_query_optimizer_info (Transact-SQL)

Vonatkozik a következőkre:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalitikai Platform System (PDW)SQL adatbázis a Microsoft Fabric-ben

Részletes statisztikákat ad vissza az SQL Server lekérdezésoptimalizáló működéséről. Ezt a nézetet a számítási feladatok finomhangolásakor használhatja a lekérdezésoptimalizálási problémák vagy fejlesztések azonosításához. Használhatja például az optimalizálások teljes számát, az eltelt időértéket és a végső költségértéket az aktuális számítási feladat lekérdezésoptimalizálásainak és a finomhangolási folyamat során megfigyelt változásoknak a összehasonlításához. Egyes számlálók olyan adatokat biztosítanak, amelyek csak az SQL Server belső diagnosztikai használatához relevánsak. Ezek a számlálók csak belsőként vannak megjelölve.

Jegyzet

Ha ezt az Azure Synapse Analytics vagy az Analytics Platform System (PDW) szolgáltatásból szeretné meghívni, használja a sys.dm_pdw_nodes_exec_query_optimizer_infonevet. Ezt a szintaxist az Azure Synapse Analytics kiszolgáló nélküli SQL-készlete nem támogatja.

Név Adattípus Leírás
counter nvarchar(4000) Az optimalizáló statisztikai esemény neve.
occurrence bigint A számláló optimalizálási eseményeinek száma.
value lebegőpontos Átlagos tulajdonságérték eseményeseményenként.
pdw_node_id Annak a csomópontnak az azonosítója, amelyen ez a disztribúció található.

A következővonatkozik: Azure Synapse Analytics, Analytics Platform System (PDW)

Engedélyek

Az SQL Server 2019 (15.x) és a korábbi verziók, valamint a felügyelt Azure SQL-példány VIEW SERVER STATE engedélyt igényelnek.

Az SQL Server 2022 (16.x) és újabb verziói VIEW SERVER PERFORMANCE STATE engedélyt igényelnek a kiszolgálón.

Az Azure SQL Database Alapszintű, S0és S1 szolgáltatás célkitűzésein, valamint rugalmas készletekadatbázisaiban a kiszolgáló rendszergazdai fiókja, a Microsoft Entra rendszergazdai-fiók vagy a ##MS_ServerStateReader##kiszolgálói szerepkör tagsága szükséges. Az SQL Database-szolgáltatás összes többi célkitűzéséhez vagy az adatbázis VIEW DATABASE STATE engedélyére, vagy a ##MS_ServerStateReader## kiszolgálói szerepkör tagságára van szükség.

Megjegyzések

sys.dm_exec_query_optimizer_info a következő tulajdonságokat (számlálókat) tartalmazza. Az összes előfordulási érték összegző, és a rendszer újraindításakor 0 értékre van állítva. Az értékmezők minden értéke NULL a rendszer újraindításakor. Az átlagot meghatározó összes értékoszlop a nevezővel azonos sorból származó előfordulási értéket használja az átlag kiszámításához. Minden lekérdezésoptimalizálás akkor történik, amikor az SQL Server meghatározza a dm_exec_query_optimizer_infomódosításait, beleértve a felhasználó által generált és a rendszer által generált lekérdezéseket is. A már gyorsítótárazott terv végrehajtása nem változtatja meg az értékeket a dm_exec_query_optimizer_info, csak az optimalizálás jelentős.

Pult Előfordulás Érték
optimizations Optimalizálások teljes száma. Nem alkalmazható
elapsed time Optimalizálások teljes száma. Az egyes utasítások (lekérdezések) optimalizálási átlagos időtartama másodpercben.
final cost Optimalizálások teljes száma. Egy optimalizált terv becsült becsült költségeinek átlaga belső költségegységekben.
trivial plan Csak belső Csak belső
tasks Csak belső Csak belső
no plan Csak belső Csak belső
search 0 Csak belső Csak belső
search 0 time Csak belső Csak belső
search 0 tasks Csak belső Csak belső
search 1 Csak belső Csak belső
search 1 time Csak belső Csak belső
search 1 tasks Csak belső Csak belső
search 2 Csak belső Csak belső
search 2 time Csak belső Csak belső
search 2 tasks Csak belső Csak belső
gain stage 0 to stage 1 Csak belső Csak belső
gain stage 1 to stage 2 Csak belső Csak belső
timeout Csak belső Csak belső
memory limit exceeded Csak belső Csak belső
insert stmt Az INSERT utasításokhoz tartozó optimalizálások száma. Nem alkalmazható
delete stmt Az DELETE utasításokhoz tartozó optimalizálások száma. Nem alkalmazható
update stmt Az UPDATE utasításokhoz tartozó optimalizálások száma. Nem alkalmazható
merge stmt Az MERGE utasításokhoz tartozó optimalizálások száma. Nem alkalmazható
contains subquery A legalább egy részkérést tartalmazó lekérdezések optimalizálási száma. Nem alkalmazható
unnest failed Csak belső Csak belső
tables Optimalizálások teljes száma. Az optimalizált lekérdezésenként hivatkozott táblák átlagos száma.
hints Hányszor adott meg valamilyen tippet. A megszámolt tippek közé tartoznak a következők: JOIN, GROUP, UNION és FORCE ORDER lekérdezési tippek, FORCE PLAN beállítás és illesztéstippek. Nem alkalmazható
order hint Hányszor kényszerítették az illesztés sorrendjét. Ez a számláló nem korlátozódik a FORCE ORDER tippre. Ha egy lekérdezésen belül megad egy illesztési algoritmust, például egy INNER HASH JOIN, az összekapcsolási sorrendet is kényszeríti, amely növeli a számlálót. Nem alkalmazható
join hint Hányszor kényszerítette az illesztés algoritmusát egy illesztésmutató. A FORCE ORDER lekérdezési tipp nem növeli ezt a számlálót. Nem alkalmazható
view reference Hányszor hivatkozik egy nézet egy lekérdezésben. Nem alkalmazható
remote query Azon optimalizálások száma, ahol a lekérdezés legalább egy távoli adatforrásra hivatkozott, például egy négyrészes névvel rendelkező táblára vagy egy OPENROWSET eredményre. Nem alkalmazható
maximum DOP Optimalizálások teljes száma. Egy optimalizált terv átlagos effektív MAXDOP értéke. A hatékony MAXDOP alapértelmezés szerint a maximális párhuzamossági fok kiszolgálókonfigurációs beállítás határozza meg, és a MAXDOP lekérdezési tipp értékével felül lehet bírálni egy adott lekérdezést.
maximum recursion level Azon optimalizálások száma, amelyekben a lekérdezési tipptel a MAXRECURSION-nél nagyobb 0 szintet adták meg. Az optimalizálások átlagos MAXRECURSION szintje, ahol a lekérdezési tipptel meghatározták a maximális rekurziós szintet.
indexed views loaded Csak belső Csak belső
indexed views matched Azon optimalizálások száma, amelyekben egy vagy több indexelt nézet egyezik. Az egyeztetett nézetek átlagos száma.
indexed views used Azon optimalizálások száma, amelyekben egy vagy több indexelt nézetet használnak a kimeneti tervben az egyeztetés után. A használt nézetek átlagos száma.
indexed views updated Egy olyan DML-utasítás optimalizálási száma, amely egy vagy több indexelt nézetet tartalmazó tervet hoz létre. Fenntartott nézetek átlagos száma.
dynamic cursor request Azon optimalizálások száma, amelyekben dinamikus kurzorkérelmet adott meg. Nem alkalmazható
fast forward cursor request Azoknak az optimalizálásoknak a száma, amelyekben gyorsmutató-kérést adott meg. Nem alkalmazható

Példák

Egy. Optimalizálási végrehajtás statisztikáinak megtekintése

Melyek az SQL Server jelen példányának optimalizáló végrehajtási statisztikái?

SELECT * FROM sys.dm_exec_query_optimizer_info;

B. Az optimalizálások teljes számának megtekintése

Hány optimalizálás történik?

SELECT occurrence AS Optimizations
FROM sys.dm_exec_query_optimizer_info
WHERE counter = 'optimizations';

C. Optimalizálásonkénti átlagos eltelt idő

Mi az optimalizálásonkénti átlagos eltelt idő?

SELECT ISNULL(value,0.0) AS ElapsedTimePerOptimization
FROM sys.dm_exec_query_optimizer_info
WHERE counter = 'elapsed time';

D. Részbekérdezéseket tartalmazó optimalizálások töredéke

Az optimalizált lekérdezések hány része tartalmazott alkonfigurációt?

SELECT (
    SELECT CAST(occurrence AS FLOAT)
    FROM sys.dm_exec_query_optimizer_info
    WHERE counter = 'contains subquery'
) / (
    SELECT CAST(occurrence AS FLOAT)
    FROM sys.dm_exec_query_optimizer_info
    WHERE counter = 'optimizations'
) AS ContainsSubqueryFraction;

E. A tippek teljes számának megtekintése az optimalizálás során

Hány tippet számol a rendszer, ha FORCE ORDER szerepel a lekérdezési tippben?

-- Check hint count before query execution
SELECT ISNULL('', 0) AS [Before],
    [counter],
    occurrence
FROM sys.dm_exec_query_optimizer_info
WHERE [counter] IN (
    'hints',
    'order hint',
    'join hint'
);

SELECT poh.PurchaseOrderID,
    poh.OrderDate,
    pod.ProductID,
    pod.DueDate,
    poh.VendorID
FROM Purchasing.PurchaseOrderHeader AS poh
INNER MERGE JOIN Purchasing.PurchaseOrderDetail AS pod
    ON poh.PurchaseOrderID = pod.PurchaseOrderID
OPTION (
    FORCE ORDER,
    RECOMPILE
);

-- check hint count after query execution
SELECT ISNULL('', 0) AS [After],
    [counter],
    occurrence
FROM sys.dm_exec_query_optimizer_info
WHERE [counter] IN (
    'hints',
    'order hint',
    'join hint'
);