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 2019 (15.x) e versioni
successive del database
SQL di Azure Istanza
gestita di SQL di Azurein Microsoft Fabric
Restituisce informazioni sulle query che richiedevano un indice mancante dai gruppi di indici mancanti, esclusi gli indici spaziali. Potrebbero essere restituite più di una query per ogni gruppo di indice mancante. Un gruppo di indici mancante potrebbe avere diverse query che necessitavano dello stesso indice.
In Azure SQL Database, le viste di gestione dinamica non possono esporre informazioni che influenzerebbero il contenimento del database, né informazioni su altri database a cui l'utente ha accesso. Per evitare di esporre queste informazioni, ogni riga contenente dati che non appartengono al tenant connesso viene filtrata.
| Nome colonna | Tipo di dati | Descrizione |
|---|---|---|
group_handle |
int | Identifica un gruppo di indici mancanti. Questo identificatore è univoco a livello di server. Le altre colonne contengono informazioni su tutte le query per cui l'indice del gruppo viene considerati mancante. Un gruppo di indici contiene un solo indice. Può essere aggiunto a index_group_handle in sys.dm_db_missing_index_groups. |
query_hash |
binary(8) | Valore hash binario calcolato sulla query che consente di identificare query con logica analoga. È possibile utilizzare il valore hash della query per determinare l'utilizzo delle risorse aggregate per query che differiscono solo per valori letterali. |
query_plan_hash |
binary(8) | Valore hash binario calcolato sul piano di esecuzione di query che consente di identificare piani di esecuzioni analoghi. È possibile utilizzare il valore hash del piano di query per individuare il costo cumulativo di query con piani di esecuzione analoghi. Sempre 0x000 quando una procedura memorizzata compilata nativamente interroga una tabella ottimizzata per la memoria. |
last_sql_handle |
varbinary(64) | Un token che identifica in modo univoco la procedura batch o stored dell'ultima istruzione compilata che necessitava di questo indice.last_sql_handle Può essere usato per recuperare il testo SQL della query chiamando la funzione di gestione dinamica sys.dm_exec_sql_text. |
last_statement_start_offset |
int | Indica, in byte, a partire da 0, la posizione iniziale della query descritta dalla riga all'interno del testo del relativo batch o oggetto persistente per l'ultima istruzione compilata che richiedeva questo indice nel relativo batch SQL. |
last_statement_end_offset |
int | Indica, in byte, che inizia con 0, la posizione finale della query che la riga descrive all'interno del testo del suo batch o oggetto persisted, per l'ultima istruzione compilata che necessitava di questo indice nel suo batch SQL. |
last_statement_sql_handle |
varbinary(64) | Un token che identifica in modo univoco la procedura batch o stored dell'ultima istruzione compilata che necessitava di questo indice. Usato da Query Store. A differenza di last_sql_handle, sys.query_store_query_text fa riferimento all'oggetto statement_sql_handle usato dalla vista del catalogo di Query Store sys.query_store_query_text.Ritorna 0 se Query Store non era abilitato quando la query è stata compilata. |
user_seeks |
bigint | Numero di operazioni Seek causate da query utente per cui avrebbe potuto essere utilizzato l'indice consigliato del gruppo. |
user_scans |
bigint | Numero di analisi causate da query utente per cui avrebbe potuto essere utilizzato l'indice consigliato del gruppo. |
last_user_seek |
datetime | Data e ora dell'ultima operazione Seek causata da query utente per cui avrebbe potuto essere utilizzato l'indice consigliato del gruppo. |
last_user_scan |
datetime | Data e ora dell'ultima analisi causata da query utente per cui avrebbe potuto essere utilizzato l'indice consigliato del gruppo. |
avg_total_user_cost |
float | Costo medio delle query utente che potrebbe essere ridotto dall'indice del gruppo. |
avg_user_impact |
float | Vantaggio percentuale medio che potrebbe essere garantito alle query utente con l'implementazione del gruppo di indici mancanti. Questo valore indica la percentuale di riduzione media del costo delle query in caso di implementazione del gruppo di indici mancanti. |
system_seeks |
bigint | Numero di operazioni Seek causate da query di sistema, ad esempio query su statistiche automatiche, per cui avrebbe potuto essere utilizzato l'indice consigliato del gruppo. Per altre informazioni, vedere Classe di evento Auto Stats. |
system_scans |
bigint | Numero di analisi causate da query di sistema per cui avrebbe potuto essere utilizzato l'indice consigliato del gruppo. |
last_system_seek |
datetime | Data e ora dell'ultima operazione Seek di sistema causata da query di sistema per cui avrebbe potuto essere utilizzato l'indice consigliato del gruppo. |
last_system_scan |
datetime | Data e ora dell'ultima analisi di sistema causata da query di sistema per cui avrebbe potuto essere utilizzato l'indice consigliato del gruppo. |
avg_total_system_cost |
float | Costo medio delle query di sistema che potrebbe essere ridotto dall'indice del gruppo. |
avg_system_impact |
float | Vantaggio percentuale medio che potrebbe essere garantito alle query di sistema con l'implementazione del gruppo di indici mancanti. Questo valore indica la percentuale di riduzione media del costo delle query in caso di implementazione del gruppo di indici mancanti. |
Osservazioni:
Le informazioni restituite da sys.dm_db_missing_index_group_stats_query vengono aggiornate da ogni esecuzione di query, non da ogni compilazione o ricompilazione di query. Le statistiche di utilizzo non vengono mantenute e vengono conservate solo fino al riavvio del motore del database.
Per mantenere le statistiche di utilizzo anche dopo il riciclo del server, gli amministratori di database devono eseguire periodicamente copie di backup delle informazioni relative agli indici mancanti. Usare la colonna sqlserver_start_time in sys.dm_os_sys_info per trovare l'ora di avvio dell'ultimo motore di database. È anche possibile rendere persistenti gli indici mancanti con Query Store.
Autorizzazioni
Per interrogare questa vista di gestione dinamica, agli utenti è necessario ottenere il VIEW SERVER STATE permesso o qualsiasi permesso che implichi tale VIEW SERVER STATE permesso, per SQL Server 2019 (15.x) e versioni precedenti.
Richiede il permesso VIEW SERVER PERFORMANCE STATE sul server, per SQL Server 2022 (16.x) e versioni successive.
Esempi
Negli esempi seguenti viene illustrato come usare la sys.dm_db_missing_index_group_stats_query visualizzazione a gestione dinamica.
R. Trovare il testo della query più recente per i primi 10 migliori miglioramenti previsti per le query utente
La query seguente restituisce l'ultimo testo della query registrato per i 10 indici mancanti che produrrebbero il miglioramento cumulativo più elevato previsto, in ordine decrescente.
SELECT TOP 10
SUBSTRING
(
sql_text.text,
misq.last_statement_start_offset / 2 + 1,
(
CASE misq.last_statement_start_offset
WHEN -1 THEN DATALENGTH(sql_text.text)
ELSE misq.last_statement_end_offset
END - misq.last_statement_start_offset
) / 2 + 1
),
misq.*
FROM sys.dm_db_missing_index_group_stats_query AS misq
CROSS APPLY sys.dm_exec_sql_text(misq.last_sql_handle) AS sql_text
ORDER BY misq.avg_total_user_cost
* misq.avg_user_impact
* (misq.user_seeks + misq.user_scans) DESC;
Contenuti correlati
- Ottimizzare gli indici non cluster con suggerimenti di indici mancanti
- sys.dm_db_missing_index_columns (Transact-SQL)
- sys.dm_db_missing_index_details (Transact-SQL)
- sys.dm_db_missing_index_groups (Transact-SQL)
- sys.dm_db_missing_index_group_stats (Transact-SQL)
- sys.dm_exec_sql_text (Transact-SQL)
- CREA INDICE (Transact-SQL)
- sys.dm_os_sys_info (Transact-SQL)
- Monitorare le prestazioni tramite Query Store