Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL Database w Microsoft Fabric
Zwraca szczegółowe statystyki dotyczące działania optymalizatora zapytań programu SQL Server. Ten widok można użyć podczas dostrajania obciążenia w celu identyfikowania problemów lub ulepszeń optymalizacji zapytań. Można na przykład użyć łącznej liczby optymalizacji, wartości czasu, której upłynął czas, oraz ostatecznej wartości kosztu, aby porównać optymalizacje zapytań bieżącego obciążenia i wszelkie zmiany zaobserwowane podczas procesu dostrajania. Niektóre liczniki zapewniają dane, które są istotne tylko w przypadku wewnętrznego użycia diagnostycznego programu SQL Server. Te liczniki są oznaczone jako "Tylko wewnętrzne".
Nuta
Aby wywołać to z usługi Azure Synapse Analytics lub Analytics Platform System (PDW), użyj nazwy sys.dm_pdw_nodes_exec_query_optimizer_info. Ta składnia nie jest obsługiwana przez bezserwerową pulę SQL w usłudze Azure Synapse Analytics.
| Nazwa | Typ danych | Opis |
|---|---|---|
counter |
nvarchar(4000) | Nazwa zdarzenia statystyk optymalizatora. |
occurrence |
bigint | Liczba wystąpień zdarzenia optymalizacji dla tego licznika. |
value |
zmiennoprzecinkowe | Średnia wartość właściwości na wystąpienie zdarzenia. |
pdw_node_id |
Identyfikator węzła, w ramach którego znajduje się ta dystrybucja. dotyczy: Azure Synapse Analytics, Analytics Platform System (PDW) |
Uprawnienia
Program SQL Server 2019 (15.x) i starsze wersje oraz usługa Azure SQL Managed Instance wymagają uprawnień VIEW SERVER STATE.
Program SQL Server 2022 (16.x) i nowsze wersje wymagają VIEW SERVER PERFORMANCE STATE uprawnienia na serwerze.
W usłudze Azure SQL Database VIEW DATABASE STATE w bazie danych lub członkostwo w ##MS_ServerStateReader## roli serwera.
Uwagi
sys.dm_exec_query_optimizer_info zawiera następujące właściwości (liczniki). Wszystkie wartości wystąpień są skumulowane i są ustawione na 0 podczas ponownego uruchamiania systemu. Wszystkie wartości pól wartości są ustawione na NULL podczas ponownego uruchamiania systemu. Wszystkie wartości kolumny wartości, które określają średnią, używają wartości wystąpienia z tego samego wiersza co mianownik w obliczeniu średniej. Wszystkie optymalizacje zapytań są mierzone, gdy program SQL Server określa zmiany w dm_exec_query_optimizer_info, w tym zapytania generowane przez użytkownika i generowane przez system. Wykonanie już buforowanego planu nie zmienia wartości w dm_exec_query_optimizer_info, tylko optymalizacje są znaczące.
| Lada | Zdarzenie | Wartość |
|---|---|---|
optimizations |
Łączna liczba optymalizacji. | Nie dotyczy |
elapsed time |
Łączna liczba optymalizacji. | Średni czas, który upłynął na optymalizację pojedynczej instrukcji (zapytania), w sekundach. |
final cost |
Łączna liczba optymalizacji. | Średni szacowany koszt zoptymalizowanego planu w jednostkach kosztów wewnętrznych. |
trivial plan |
Tylko wewnętrzne | Tylko wewnętrzne |
tasks |
Tylko wewnętrzne | Tylko wewnętrzne |
no plan |
Tylko wewnętrzne | Tylko wewnętrzne |
search 0 |
Tylko wewnętrzne | Tylko wewnętrzne |
search 0 time |
Tylko wewnętrzne | Tylko wewnętrzne |
search 0 tasks |
Tylko wewnętrzne | Tylko wewnętrzne |
search 1 |
Tylko wewnętrzne | Tylko wewnętrzne |
search 1 time |
Tylko wewnętrzne | Tylko wewnętrzne |
search 1 tasks |
Tylko wewnętrzne | Tylko wewnętrzne |
search 2 |
Tylko wewnętrzne | Tylko wewnętrzne |
search 2 time |
Tylko wewnętrzne | Tylko wewnętrzne |
search 2 tasks |
Tylko wewnętrzne | Tylko wewnętrzne |
gain stage 0 to stage 1 |
Tylko wewnętrzne | Tylko wewnętrzne |
gain stage 1 to stage 2 |
Tylko wewnętrzne | Tylko wewnętrzne |
timeout |
Tylko wewnętrzne | Tylko wewnętrzne |
memory limit exceeded |
Tylko wewnętrzne | Tylko wewnętrzne |
insert stmt |
Liczba optymalizacji dla instrukcji INSERT. |
Nie dotyczy |
delete stmt |
Liczba optymalizacji dla instrukcji DELETE. |
Nie dotyczy |
update stmt |
Liczba optymalizacji dla instrukcji UPDATE. |
Nie dotyczy |
merge stmt |
Liczba optymalizacji dla instrukcji MERGE. |
Nie dotyczy |
contains subquery |
Liczba optymalizacji zapytania zawierającego co najmniej jedną podzapytę. | Nie dotyczy |
unnest failed |
Tylko wewnętrzne | Tylko wewnętrzne |
tables |
Łączna liczba optymalizacji. | Średnia liczba tabel, do których odwołuje się zapytanie zoptymalizowane. |
hints |
Ile razy określono wskazówkę. Zliczane wskazówki obejmują: JOIN, GROUP, UNION i wskazówki dotyczące zapytań FORCE ORDER, opcję zestawu FORCE PLAN i wskazówki sprzężenia. |
Nie dotyczy |
order hint |
Liczba przypadków, w których wymuszono kolejność sprzężenia. Ten licznik nie jest ograniczony do wskazówki FORCE ORDER. Określenie algorytmu sprzężenia w zapytaniu, takiego jak INNER HASH JOIN, wymusza również kolejność sprzężenia, co zwiększa licznik. |
Nie dotyczy |
join hint |
Ile razy algorytm sprzężenia został wymuszony przez wskazówkę sprzężenia. Wskazówka zapytania FORCE ORDER nie zwiększa tego licznika. |
Nie dotyczy |
view reference |
Liczba odwołań do widoku w zapytaniu. | Nie dotyczy |
remote query |
Liczba optymalizacji, w których zapytanie odwołuje się do co najmniej jednego zdalnego źródła danych, takiego jak tabela z nazwą czteroczęściową lub wynikiem OPENROWSET. |
Nie dotyczy |
maximum DOP |
Łączna liczba optymalizacji. | Średnia efektywna wartość MAXDOP dla zoptymalizowanego planu. Domyślnie obowiązująca MAXDOP jest określana przez maksymalny stopień równoległości opcji konfiguracji serwera i może zostać zastąpiona dla określonego zapytania przez wartość wskazówki MAXDOP zapytania. |
maximum recursion level |
Liczba optymalizacji, w których został określony poziom MAXRECURSION większy niż 0 z wskazówką zapytania. |
Średni poziom MAXRECURSION w optymalizacjach, w których określono maksymalny poziom rekursji z wskazówką zapytania. |
indexed views loaded |
Tylko wewnętrzne | Tylko wewnętrzne |
indexed views matched |
Liczba optymalizacji, w których jest dopasowywany co najmniej jeden indeksowany widok. | Średnia liczba dopasowanych widoków. |
indexed views used |
Liczba optymalizacji, w których co najmniej jeden indeksowany widok jest używany w planie danych wyjściowych po dopasowaniu. | Średnia liczba używanych widoków. |
indexed views updated |
Liczba optymalizacji instrukcji DML, która generuje plan, który utrzymuje jeden lub więcej widoków indeksowanych. | Średnia liczba obsługiwanych widoków. |
dynamic cursor request |
Liczba optymalizacji, w których określono dynamiczne żądanie kursora. | Nie dotyczy |
fast forward cursor request |
Liczba optymalizacji, w których określono żądanie kursora szybkiego przesyłania dalej. | Nie dotyczy |
Przykłady
A. Wyświetlanie statystyk dotyczących wykonywania optymalizatora
Jakie są bieżące statystyki wykonywania optymalizatora dla tego wystąpienia programu SQL Server?
SELECT * FROM sys.dm_exec_query_optimizer_info;
B. Wyświetlanie całkowitej liczby optymalizacji
Ile optymalizacji jest wykonywanych?
SELECT occurrence AS Optimizations
FROM sys.dm_exec_query_optimizer_info
WHERE counter = 'optimizations';
C. Średni czas, który upłynął na optymalizację
Jaki jest średni czas, który upłynął na optymalizację?
SELECT ISNULL(value,0.0) AS ElapsedTimePerOptimization
FROM sys.dm_exec_query_optimizer_info
WHERE counter = 'elapsed time';
D. Ułamek optymalizacji obejmujących podzapytania
Jaki ułamek zoptymalizowanych zapytań zawierał podzapytywanie?
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. Wyświetlanie całkowitej liczby wskazówek podczas optymalizacji
Ile wskazówek jest liowanych, gdy FORCE ORDER jest uwzględniona jako wskazówka zapytania?
-- 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'
);
Powiązana zawartość
- dynamiczne widoki zarządzania i funkcje (Transact-SQL)
- dynamiczne widoki zarządzania i funkcje związane z wykonywaniem (Transact-SQL)