Condividi tramite


sys.dm_db_missing_index_group_stats_query (Transact-SQL)

Si applica a: SQL Server 2019 (15.x) e versioni successive del databaseSQL 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;