Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Vonatkozik a következőkre:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analitikai 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'
);