Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a: SQL Server 2016 (13.x) e versioni
successive Azure SQL Database
AzureSQL Managed Instance
SQL database in Microsoft Fabric
Restituisce il piano di esecuzione delle query per le richieste in corso. Utilizzare questa DMV per recuperare l'XML di showplan con statistiche transitorie.
Sintassi
sys.dm_exec_query_statistics_xml(session_id)
Argomenti
session_id
ID sessione che esegue il batch da cercare. session_id è smallint. session_id Può essere ricavato dagli oggetti a gestione dinamica seguenti:
Tabella restituita
| Nome colonna | Tipo di dati | Descrizione |
|---|---|---|
session_id |
smallint | ID della sessione. Non ammette i valori NULL. |
request_id |
int | ID della richiesta. Non ammette i valori NULL. |
sql_handle |
varbinary(64) | Token che identifica in modo univoco il batch o la procedura memorizzata di cui fa parte la query. Nullable. |
plan_handle |
varbinary(64) | Token che identifica in modo univoco un piano di esecuzione di query per un batch che è attualmente in esecuzione. Nullable. |
query_plan |
xml | Contiene la rappresentazione Showplan di runtime del piano di esecuzione della query, specificato con plan_handle che contiene statistiche parziali. Il Showplan è in formato XML. Viene generato un piano per ogni batch contenente ad esempio istruzioni Transact-SQL ad hoc, chiamate di stored procedure e chiamate di funzioni definite dall'utente. Nullable. |
Limitazioni
A causa di una possibile violazione di accesso casuale (AV) durante l'esecuzione di una stored procedure di monitoraggio con il DMV sys.dm_exec_query_statistics_xml, il valore dell'attributo Showplan XML <ParameterList>ParameterRuntimeValue è stato rimosso in SQL Server 2017 (14.x) CU 26 e SQL Server 2019 (15.x) CU 12. Questo valore può essere utile durante la risoluzione dei problemi relativi alle stored procedure a esecuzione prolungata. È possibile riabilitare questo valore in SQL Server 2017 (14.x) CU 31, SQL Server 2019 (15.x) CU 19 e versioni successive, usando il flag di traccia 2446. Questo flag di traccia abilita la raccolta del valore del parametro di runtime a costo di introdurre un sovraccarico aggiuntivo.
Attenzione
Il trace flag 2446 non è progettato per essere abilitato in modo continuo in un ambiente di produzione, ma solo per scopi di risoluzione dei problemi limitati nel tempo. L'uso di questo flag di traccia introduce un sovraccarico di CPU e memoria aggiuntivo e possibilmente significativo, perché crea un frammento XML Showplan con informazioni sui parametri di runtime, indipendentemente dal fatto che la sys.dm_exec_query_statistics_xml DMV venga chiamata o meno.
In SQL Server 2022 (16.x), database SQL di Azure e Istanza gestita di SQL di Azure è possibile eseguire la stessa funzionalità a livello di database usando l'opzione FORCE_SHOWPLAN_RUNTIME_PARAMETER_COLLECTION in ALTER DATABASE SCOPED CONFIGURATION (Transact-SQL).
Osservazioni:
Questa funzione di sistema è disponibile a partire da SQL Server 2016 (13.x) con Service Pack 1. Per altre informazioni, vedere kb 3190871.
Questa funzione di sistema funziona sia con l'infrastruttura di profilazione delle statistiche di esecuzione delle query standard che con quella leggera. Per ulteriori informazioni, vedere Infrastruttura di profilazione delle query.
Nelle condizioni seguenti non viene restituito alcun output Showplan nella query_plan colonna della tabella restituita per sys.dm_exec_query_statistics_xml:
- Se il piano di query che corrisponde al session_id specificato non è più in esecuzione, la
query_plancolonna della tabella restituita è Null. Ad esempio, questa condizione può verificarsi se si verifica un ritardo di tempo tra l'acquisizione dell'handle del piano e il momento in cui è stato usato consys.dm_exec_query_statistics_xml
A causa di una limitazione del numero di livelli annidati consentiti nel tipo di dati xml , sys.dm_exec_query_statistics_xml non può restituire piani di query che soddisfano o superano 128 livelli di elementi annidati. Nelle versioni precedenti di SQL Server, questa condizione impediva il completamento del piano di query e generava l'errore 6335. In SQL Server 2005 (9.x) Service Pack 2 e versioni successive la query_plan colonna restituisce NULL.
Autorizzazioni
È richiesta VIEW SERVER STATE l'autorizzazione per il server, in SQL Server 2019 (15.x) e versioni precedenti.
È richiesta VIEW SERVER PERFORMANCE STATE l'autorizzazione per il server, in SQL Server 2022 (16.x) e versioni successive.
Richiede l'autorizzazione VIEW DATABASE STATE nel database, nei livelli Premium del database SQL.
Richiede l'amministratore del server o un account amministratore di Microsoft Entra nei livelli Standard e Basic del database SQL.
Esempi
A. Esaminare il piano di query in tempo reale e le statistiche di esecuzione di un batch in esecuzione
Nell'esempio seguente viene sys.dm_exec_requests eseguita una query per trovare la query interessante e copiarla session_id dall'output.
SELECT *
FROM sys.dm_exec_requests;
GO
Quindi, per ottenere il piano di query in tempo reale e le statistiche di esecuzione, usare la copia session_id con la funzione sys.dm_exec_query_statistics_xml di sistema. Eseguire questa query in una sessione diversa rispetto alla sessione in cui è in esecuzione la query.
SELECT * FROM sys.dm_exec_query_statistics_xml(< copied session_id >);
GO
In alternativa, combinato per tutte le richieste in esecuzione. Eseguire questa query in una sessione diversa rispetto alla sessione in cui è in esecuzione la query.
SELECT eqs.query_plan,
er.session_id,
er.request_id,
er.database_id,
er.start_time,
er.[status],
er.wait_type,
er.wait_resource,
er.last_wait_type,
(er.cpu_time / 1000) AS cpu_time_sec,
(er.total_elapsed_time / 1000) / 60 AS elapsed_time_minutes,
(er.logical_reads * 8) / 1024 AS logical_reads_KB,
er.granted_query_memory,
er.dop,
er.row_count,
er.query_hash,
er.query_plan_hash
FROM sys.dm_exec_requests AS er
CROSS APPLY sys.dm_exec_query_statistics_xml(session_id) AS eqs
WHERE er.session_id <> @@SPID;
GO