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 2017 (14.x) i nowsze wersje bazy danych
SQL Sql Database azure SQL
Database
w usłudze Microsoft Fabric
Zwraca szczegółowe informacje o rekomendacjach dotyczących automatycznego dostrajania. Aby uzyskać więcej informacji, zobacz Automatyczne dostrajanie
Aby uzyskać więcej informacji, zobacz Monitorowanie i dostrajanie wydajności w usługach Azure SQL Database i Azure SQL Managed Instance.
W usłudze Azure SQL Database dynamiczne widoki zarządzania nie mogą uwidaczniać informacji, które miałyby wpływ na zawieranie bazy danych lub uwidaczniać informacje o innych bazach danych, do których użytkownik ma dostęp. Aby uniknąć uwidaczniania tych informacji, każdy wiersz zawierający dane, które nie należą do połączonej dzierżawy, jest filtrowany.
| Nazwa kolumny | Typ danych | Opis |
|---|---|---|
| name | nvarchar(4000) | Unikatowa nazwa rekomendacji. |
| type | nvarchar(4000) | Nazwa opcji automatycznego dostrajania, która wyprodukowała zalecenie, na przykład FORCE_LAST_GOOD_PLAN |
| przyczyna | nvarchar(4000) | Przyczyna podania tego zalecenia. |
| valid_since | datetime2 | Przy pierwszym wygenerowaniu tej rekomendacji. |
| last_refresh | datetime2 | Ostatni raz ta rekomendacja została wygenerowana. |
| state | nvarchar(4000) | Dokument JSON opisujący stan zalecenia. Dostępne są następujące pola: - currentValue — bieżący stan zalecenia.- reason - stała, która opisuje, dlaczego zalecenie jest w bieżącym stanie. |
| is_executable_action | bit | 1 = Zalecenie można wykonać względem bazy danych za pomocą skryptu Transact-SQL. 0 = Rekomendacja nie może być wykonywana względem bazy danych (na przykład: tylko informacje lub rekomendacja przywrócona) |
| is_revertable_action | bit | 1 = Rekomendacja może być automatycznie monitorowana i przywracana przez aparat bazy danych. 0 = Rekomendacja nie może być automatycznie monitorowana i przywracana. Większość akcji wykonywalnych będzie można przywrócić. |
| execute_action_start_time | datetime2 | Data zastosowania zalecenia. |
| execute_action_duration | time | Czas trwania akcji wykonania. |
| execute_action_initiated_by | nvarchar(4000) |
User = Ręcznie wymuszony plan użytkownika w rekomendacji.System = Rekomendacja zastosowana automatycznie przez system. |
| execute_action_initiated_time | datetime2 | Data zastosowania zalecenia. |
| revert_action_start_time | datetime2 | Data, w których zalecenie zostało przywrócone. |
| revert_action_duration | time | Czas trwania akcji przywracania. |
| revert_action_initiated_by | nvarchar(4000) |
User = Użytkownik ręcznie niewymuszonego zalecanego planu.System = Rekomendacja automatycznie przywrócona przez system. |
| revert_action_initiated_time | datetime2 | Data, w których zalecenie zostało przywrócone. |
| wynik | int | Szacowana wartość/efekt dla tego zalecenia w skali od 0 do 100 (tym większa) |
| Szczegóły | nvarchar(max) | Dokument JSON zawierający więcej szczegółów na temat zalecenia. Dostępne są następujące pola:planForceDetails- queryId — query_id zapytania, których regresja jest regresja.- regressedPlanId - plan_id planu regresji.- regressedPlanExecutionCount — Liczba wykonań zapytania z planem regresji przed wykryciem regresji.- regressedPlanAbortedCount - Liczba wykrytych błędów podczas wykonywania planu regresji.- regressedPlanCpuTimeAverage — Średni czas procesora CPU (w mikrosekundach) używany przez zapytanie regresji przed wykryciem regresji.- regressedPlanCpuTimeStddev — Odchylenie standardowe czasu procesora CPU zużywane przez zapytanie regresji przed wykryciem regresji.- recommendedPlanId - plan_id planu, który należy wymusić.- recommendedPlanExecutionCount— Liczba wykonań zapytania z planem, które należy wymusić przed wykryciem regresji.- recommendedPlanAbortedCount - Liczba wykrytych błędów podczas wykonywania planu, które należy wymusić.- recommendedPlanCpuTimeAverage — Średni czas procesora CPU (w mikrosekundach) używany przez zapytanie wykonane z planem, który powinien zostać wymuszony (obliczony przed wykryciem regresji).- recommendedPlanCpuTimeStddev Odchylenie standardowe czasu procesora CPU zużywane przez zapytanie o regresji przed wykryciem regresji.implementationDetails- method - Metoda, która powinna służyć do poprawiania regresji. Wartość to zawsze TSql.- script - Transact-SQL skrypt, który należy wykonać, aby wymusić zalecany plan. |
Uwagi
Informacje zwracane przez sys.dm_db_tuning_recommendations program są aktualizowane, gdy aparat bazy danych identyfikuje potencjalną regresję wydajności zapytań i nie jest utrwalany. Zalecenia są przechowywane tylko do momentu ponownego uruchomienia aparatu bazy danych. Użyj kolumny sqlserver_start_time w sys.dm_os_sys_info , aby znaleźć ostatni czas uruchamiania aparatu bazy danych. Administratorzy baz danych powinni okresowo tworzyć kopie zapasowe zalecenia dostrajania, jeśli chcą zachować je po recyklingu serwera.
Pole currentValue w kolumnie state może mieć następujące wartości:
| Status | Description |
|---|---|
Active |
Rekomendacja jest aktywna i nie jest jeszcze stosowana. Użytkownik może wykonać skrypt rekomendacji i wykonać go ręcznie. |
Verifying |
Zalecenie jest stosowane przez aparat bazy danych i wewnętrzny proces weryfikacji porównuje wydajność wymuszonego planu z planem regresji. |
Success |
Zalecenie zostało pomyślnie zastosowane. |
Reverted |
Zalecenie zostało przywrócone, ponieważ nie ma znaczących wzrostów wydajności. |
Expired |
Zalecenie wygasło i nie można go już stosować. |
Dokument JSON w state kolumnie zawiera przyczynę, dla których opisano, dlaczego zalecenie jest w bieżącym stanie. Wartości w polu przyczyny mogą być następujące:
| Przyczyna | Description |
|---|---|
SchemaChanged |
Zalecenie wygasło, ponieważ schemat tabeli, do których odwołuje się odwołanie, został zmieniony. Nowe zalecenie zostanie utworzone, jeśli zostanie wykryta nowa regresja planu zapytania w nowym schemacie. |
StatisticsChanged |
Zalecenie wygasło z powodu zmiany statystyki w tabeli, do których odwołuje się odwołanie. Nowe zalecenie zostanie utworzone, jeśli zostanie wykryta nowa regresja planu zapytania na podstawie nowych statystyk. |
ForcingFailed |
Zalecanego planu nie można wymusić na zapytaniu. Znajdź element last_force_failure_reason w widoku sys.query_store_plan , aby znaleźć przyczynę błędu. |
AutomaticTuningOptionDisabled |
FORCE_LAST_GOOD_PLAN opcja jest wyłączona przez użytkownika podczas procesu weryfikacji. Włącz FORCE_LAST_GOOD_PLAN opcję przy użyciu instrukcji ALTER DATABASE SET AUTOMATIC_TUNING (Transact-SQL) lub wymuś ręczne użycie skryptu w kolumnie details . |
UnsupportedStatementType |
W zapytaniu nie można wymusić wymuszenia planu. Przykłady nieobsługiwanych zapytań to kursory i INSERT BULK instrukcja. |
LastGoodPlanForced |
Zalecenie zostało pomyślnie zastosowane. |
AutomaticTuningOptionNotEnabled |
Aparat bazy danych zidentyfikował potencjalną regresję wydajności, ale FORCE_LAST_GOOD_PLAN opcja nie jest włączona — zobacz ALTER DATABASE SET AUTOMATIC_TUNING (Transact-SQL). Zastosuj zalecenie ręcznie lub włącz FORCE_LAST_GOOD_PLAN opcję. |
VerificationAborted |
Proces weryfikacji został przerwany z powodu ponownego uruchomienia lub oczyszczania magazynu zapytań. |
VerificationForcedQueryRecompile |
Zapytanie jest ponownie skompilowane, ponieważ nie ma znaczącej poprawy wydajności. |
PlanForcedByUser |
Użytkownik ręcznie wymusił plan przy użyciu procedury sp_query_store_force_plan (Transact-SQL). Aparat bazy danych nie zastosuje rekomendacji, jeśli użytkownik jawnie zdecyduje się wymusić jakiś plan. |
PlanUnforcedByUser |
Użytkownik ręcznie nie wymuś planu przy użyciu procedury sp_query_store_unforce_plan (Transact-SQL). Ponieważ użytkownik jawnie przywrócił zalecany plan, aparat bazy danych będzie nadal korzystać z bieżącego planu i generować nowe zalecenie, jeśli w przyszłości wystąpi regresja planu. |
UserForcedDifferentPlan |
Użytkownik ręcznie wymusił inny plan przy użyciu procedury sp_query_store_force_plan (Transact-SQL). Aparat bazy danych nie zastosuje rekomendacji, jeśli użytkownik jawnie zdecyduje się wymusić jakiś plan. |
TempTableChanged |
Zmieniono tymczasową tabelę, która została użyta w planie. |
Statystyki w kolumnie details nie pokazują statystyk planu środowiska uruchomieniowego (na przykład bieżącego czasu procesora CPU). Szczegóły rekomendacji są wykonywane w czasie wykrywania regresji i opisują, dlaczego aparat bazy danych zidentyfikował regresję wydajności. Użyj regressedPlanId funkcji i recommendedPlanId , aby wysyłać zapytania do widoków wykazu magazynu zapytań , aby znaleźć dokładne statystyki planu środowiska uruchomieniowego.
Przykłady używania informacji o zaleceniach dotyczących dostrajania
Przykład 1
Poniższy przykładowy kod pobiera wygenerowany skrypt Transact-SQL, który wymusza dobry plan dla danego zapytania:
SELECT name,
reason,
score,
JSON_VALUE(details, '$.implementationDetails.script') AS script,
details.*
FROM sys.dm_db_tuning_recommendations
CROSS APPLY OPENJSON(details, '$.planForceDetails') WITH (
[query_id] INT '$.queryId',
regressed_plan_id INT '$.regressedPlanId',
last_good_plan_id INT '$.recommendedPlanId'
) AS details
WHERE JSON_VALUE(STATE, '$.currentValue') = 'Active';
Przykład 2
Poniższy kod pobiera wygenerowany skrypt Transact-SQL, który wymusza dobry plan dla danego zapytania i dodatkowe informacje o szacowanym zysku:
SELECT reason,
score,
script = JSON_VALUE(details, '$.implementationDetails.script'),
planForceDetails.*,
estimated_gain = (regressedPlanExecutionCount + recommendedPlanExecutionCount) * (regressedPlanCpuTimeAverage - recommendedPlanCpuTimeAverage) / 1000000,
error_prone = IIF(regressedPlanErrorCount > recommendedPlanErrorCount, 'YES', 'NO')
FROM sys.dm_db_tuning_recommendations
CROSS APPLY OPENJSON(Details, '$.planForceDetails') WITH (
[query_id] INT '$.queryId',
regressedPlanId INT '$.regressedPlanId',
recommendedPlanId INT '$.recommendedPlanId',
regressedPlanErrorCount INT,
recommendedPlanErrorCount INT,
regressedPlanExecutionCount INT,
regressedPlanCpuTimeAverage FLOAT,
recommendedPlanExecutionCount INT,
recommendedPlanCpuTimeAverage FLOAT
) AS planForceDetails;
Przykład 3
Poniższy kod pobiera wygenerowany skrypt Transact-SQL, który wymusza dobry plan dla danego zapytania oraz dodatkowe informacje zawierające tekst zapytania i plany zapytań przechowywane w magazynie zapytań:
WITH cte_db_tuning_recommendations
AS (
SELECT reason,
score,
query_id,
regressedPlanId,
recommendedPlanId,
current_state = JSON_VALUE(STATE, '$.currentValue'),
current_state_reason = JSON_VALUE(STATE, '$.reason'),
script = JSON_VALUE(details, '$.implementationDetails.script'),
estimated_gain = (regressedPlanExecutionCount + recommendedPlanExecutionCount) *
(regressedPlanCpuTimeAverage - recommendedPlanCpuTimeAverage) / 1000000,
error_prone = IIF(regressedPlanErrorCount > recommendedPlanErrorCount, 'YES', 'NO')
FROM sys.dm_db_tuning_recommendations
CROSS APPLY OPENJSON(Details, '$.planForceDetails') WITH (
[query_id] INT '$.queryId',
regressedPlanId INT '$.regressedPlanId',
recommendedPlanId INT '$.recommendedPlanId',
regressedPlanErrorCount INT,
recommendedPlanErrorCount INT,
regressedPlanExecutionCount INT,
regressedPlanCpuTimeAverage FLOAT,
recommendedPlanExecutionCount INT,
recommendedPlanCpuTimeAverage FLOAT
)
)
SELECT qsq.query_id,
qsqt.query_sql_text,
dtr.*,
CAST(rp.query_plan AS XML) AS RegressedPlan,
CAST(sp.query_plan AS XML) AS SuggestedPlan
FROM cte_db_tuning_recommendations AS dtr
INNER JOIN sys.query_store_plan AS rp
ON rp.query_id = dtr.query_id
AND rp.plan_id = dtr.regressedPlanId
INNER JOIN sys.query_store_plan AS sp
ON sp.query_id = dtr.query_id
AND sp.plan_id = dtr.recommendedPlanId
INNER JOIN sys.query_store_query AS qsq
ON qsq.query_id = rp.query_id
INNER JOIN sys.query_store_query_text AS qsqt
ON qsqt.query_text_id = qsq.query_text_id;
Aby uzyskać więcej informacji na temat funkcji JSON, które mogą służyć do wykonywania zapytań o wartości w widoku rekomendacji, zobacz Obsługa formatu JSON w a także aparatu bazy danych.
Permissions
Wymaga VIEW SERVER STATE uprawnień w programie SQL Server.
VIEW DATABASE STATE Wymaga uprawnień dla bazy danych w usłudze Azure SQL Database.
Uprawnienia dla programu SQL Server 2022 i nowszych
Wymaga VIEW SERVER PERFORMANCE STATE uprawnień na serwerze.