Condividi tramite


sys.dm_db_missing_index_group_stats_query (Transact-SQL)

Si applica a: SQL Server 2019 (15.x) database SQL di Azure Istanza gestita di SQL di Azure

Restituisce informazioni sulle query che richiedevano un indice mancante dai gruppi di indici mancanti, esclusi gli indici spaziali. È possibile che vengano restituite più query per ogni gruppo di indici mancante. Un gruppo di indici mancante può avere più query che richiedevano lo stesso indice.

Nel database SQL di Azure, le viste a gestione dinamica non possono esporre le informazioni che influenzerebbero l'indipendenza del database o le informazioni sugli altri database a cui l'utente dispone di 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 stored procedure compilata in modo nativo esegue una query su una tabella ottimizzata per la memoria.
last_sql_handle varbinary(64) Token che identifica in modo univoco il batch o la stored procedure dell'ultima istruzione compilata che richiedeva 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, a partire da 0, la posizione finale 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_sql_handle varbinary(64) Token che identifica in modo univoco il batch o la stored procedure dell'ultima istruzione compilata che richiedeva 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.

Se Query Store non è stato abilitato quando la query è stata compilata, restituisce 0.
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 mantenute solo fino al riavvio del motore di 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.

Nota

Il set di risultati per questa DMV è limitato a 600 righe. Ogni riga contiene un indice mancante. Se sono presenti più di 600 indici mancanti, è necessario risolvere gli indici mancanti esistenti in modo da poter visualizzare quelli più recenti.

Autorizzazioni

Per eseguire query su questa vista a gestione dinamica, è necessario che agli utenti sia stata concessa l'autorizzazione VIEW SERVER STATE o qualsiasi autorizzazione che include l'autorizzazione VIEW SERVER STATE.

Autorizzazioni per SQL Server 2022 e versioni successive

È richiesta l'autorizzazione VIEW SERVER PERFORMANCE STATE per il server.

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; 

Passaggi successivi

Per altre informazioni sulla funzionalità di indice mancante e sui concetti correlati, vedere gli articoli seguenti: