sys.dm_db_vector_indexes (Transact-SQL)

Si applica a: SQL Server 2025 (17.x) Database SQL di AzureIstanza gestita di SQL di AzureDatabase SQL in Microsoft Fabric

La sys.dm_db_vector_indexes vista di gestione dinamica restituisce informazioni in tempo reale sullo stato di salute dell'indice vettoriale e sulla manutenzione in background. Usa questa vista per monitorare le operazioni di recupero dei grafi DiskANN e identificare indici vettoriali che potrebbero richiedere attenzione.

Convenzioni relative alla sintassi Transact-SQL

Nome della colonna Tipo di dati Description
object_id int ID dell'oggetto della tabella che contiene l'indice vettoriale.
index_id int ID dell'indice vettoriale.
graph_catchup_pending_percent decimal(10,2) Percentuale approssimativa di modifiche in attesa di essere incorporate nel grafo DiskANN. Il valore si avvicina a zero mentre la manutenzione in background elabora le modifiche in sospeso. Il valore può essere NULL se non è mai stato eseguito alcun compito di recupero del grafo.
quantized_keys_used_percent decimal(10,2) Percentuale dello spazio delle chiavi quantizzate utilizzato dall'indice vettoriale.
last_background_task_execution_time datetime2 Tempo in cui è stata eseguita l'ultima attività di manutenzione in background. NULL se nessun compito in background è stato eseguito.
last_background_task_succeeded bit Stato di successo dell'ultimo compito di manutenzione in background. 1 indica successo, 0 indica fallimento e NULL indica che nessun compito in background è stato eseguito.
last_background_task_duration_seconds bigint Durata dell'ultimo compito di manutenzione in background, in pochi secondi. NULL se nessun compito in background è stato eseguito.
last_background_task_processed_inserts bigint Numero di inserti processati dall'ultimo compito di manutenzione in background. NULL se nessun compito in background è stato eseguito.
last_background_task_processed_deletes bigint Numero di cancellazioni processate dall'ultimo compito di manutenzione in background. NULL se nessun compito in background è stato eseguito.
last_background_task_error_message nvarchar(max) Messaggio di errore segnalato dall'ultimo compito di manutenzione in background. NULL se non è stato segnalato alcun errore o nessun compito in background è stato eseguito.

Osservazioni:

Questa vista restituisce una riga per ciascun indice vettoriale nel database corrente.

Gli indici vettoriali utilizzano la manutenzione asincrona dello sfondo per incorporare modifiche ai dati, inclusi inserti, aggiornamenti e cancellazioni, nel grafo DiskANN. La graph_catchup_pending_percent colonna mostra la percentuale approssimativa di cambiamenti che sono ancora in attesa di essere incorporati nel grafico.

Disponibilità della funzionalità

Il tipo di dato vettoriale e le funzioni vettoriali sono generalmente disponibili in SQL Server 2025, database SQL di Azure, Istanza gestita di SQL di Azure e database SQL in Fabric.

Gli indici vettoriali sono generalmente disponibili in database SQL di Azure, il database SQL in Fabric e Istanza gestita di SQL di Azure configurati con la politica di aggiornamentoAlways-up-to-date.

Gli indici vettoriali sono funzionalità di anteprima in SQL Server 2025 e Istanza gestita di SQL di Azure configurate con la policy di aggiornamento di SQL Server 2025.

Analizza graph_catchup_pending_percent

La graph_catchup_pending_percent colonna indica la percentuale approssimativa di cambiamenti di dati che non sono ancora stati incorporati nel grafico DiskANN.

Quando inserisci, aggiorni o elimini righe in una tabella con un indice vettoriale, le modifiche non vengono immediatamente incorporate nel grafico. Le modifiche vengono messe in coda e elaborate in modo asincrono da un compito di manutenzione in background.

È previsto un valore temporaneo diverso da zero dopo modifiche ai dati. La percentuale si avvicina a zero man mano che la manutenzione in background incorpora le modifiche in attesa nel grafico.

Un valore zero indica che la manutenzione del grafico ha raggiunto il ritardo. Un valore NULL può indicare che nessun compito di recupero del grafo è ancora stato eseguito.

Impatto sulle query VECTOR_SEARCH

VECTOR_SEARCH continua a funzionare mentre il recupero dei grafi è in corso. Utilizza l'attuale grafo DiskANN insieme a modifiche che non sono ancora completamente incorporate nel grafico.

Questo comportamento significa:

  • VECTOR_SEARCH può comunque considerare le righe inserite o aggiornate di recente.
  • Le righe che non sono completamente incorporate nel grafo non possono sfruttare appieno la navigazione dei grafi.
  • Le prestazioni di ricerca o il richiamo possono essere influenzati mentre viene elaborato un grande arretrato di recupero grafico.
  • La qualità e le prestazioni della ricerca sono più prevedibili quando graph_catchup_pending_percent è zero o rimane costantemente bassa.

Interpretare i valori di recupero dei grafi

Non esiste una soglia universale per una percentuale di recupero alta nel grafico. Una soglia appropriata dipende dal carico di lavoro, dalla velocità di modifica dei dati, dalla configurazione del database e dall'intervallo di manutenzione atteso.

Durante il carico batch o periodi di alta attività DML, si prevede un aumento temporaneo della percentuale di recupero grafico. Monitorare se il valore si avvicina a zero dopo che il carico di lavoro diminuisce.

Indagare l'indice vettoriale se si osservano una delle seguenti condizioni:

  • Arretrato sostenuto del grafico:graph_catchup_pending_percent rimane elevato e non si avvicina a zero.
  • Fallimento del compito di background:last_background_task_succeeded è 0.
  • Errore di task in background:last_background_task_error_message contiene un errore.
  • Richiamo ridotto:VECTOR_SEARCH restituisce meno risultati rilevanti del previsto.
  • Degrado inaspettato delle prestazioni: La latenza della ricerca vettoriale aumenta mentre l'arretrato di recupero grafico rimane elevato.

NULL I valori delle colonne del compito in background non indicano necessariamente un fallimento. Possono indicare che nessun compito di manutenzione in background è stato ancora eseguito.

Quando ricompilare un indice vettoriale

Considera di ricostruire un indice vettoriale quando osservi prestazioni misurabili o degrado del richiamo. Non ricostruire un indice basandosi solo su un valore temporaneo diverso da zero graph_catchup_pending_percent .

Gli scenari in cui la ricostruzione potrebbe essere appropriata includono:

  • Significativa degradazione del richiamo: La ricerca vettoriale restituisce meno risultati rilevanti del previsto dopo il completamento del recupero del grafo.
  • Sostituzione su larga scala dei dati: La maggior parte o tutti gli embedding vengono sostituiti, ad esempio quando i dati vengono reintegrati con un modello diverso.
  • Problemi di manutenzione persistenti: La percentuale di recupero del grafico non diminuisce e la manutenzione in background fallisce ripetutamente.

Per ulteriori informazioni, consulta le linee guida sulla qualità e manutenzione dei dati per gli indici vettoriali.

Permissions

È richiesta l'autorizzazione VIEW DATABASE STATE per il database.

Examples

A. Monitorare tutti gli indici vettoriali

La seguente query restituisce informazioni di recupero grafico e manutenzione in background per tutti gli indici vettoriali nel database corrente:

SELECT
    DB_NAME() AS database_name,
    OBJECT_SCHEMA_NAME(v.object_id) AS schema_name,
    OBJECT_NAME(v.object_id) AS table_name,
    i.name AS vector_index_name,
    v.graph_catchup_pending_percent,
    v.quantized_keys_used_percent,
    v.last_background_task_execution_time,
    v.last_background_task_succeeded,
    v.last_background_task_duration_seconds,
    v.last_background_task_processed_inserts,
    v.last_background_task_processed_deletes,
    v.last_background_task_error_message
FROM sys.dm_db_vector_indexes AS v
INNER JOIN sys.indexes AS i
    ON i.object_id = v.object_id
    AND i.index_id = v.index_id
ORDER BY
    v.graph_catchup_pending_percent DESC,
    schema_name,
    table_name,
    vector_index_name;

B. Monitora una tabella specifica

La seguente query restituisce informazioni sulla manutenzione dell'indice vettoriale per la dbo.Articles tabella:

SELECT
    OBJECT_SCHEMA_NAME(v.object_id) AS schema_name,
    OBJECT_NAME(v.object_id) AS table_name,
    i.name AS vector_index_name,
    v.graph_catchup_pending_percent,
    v.last_background_task_execution_time,
    v.last_background_task_succeeded,
    v.last_background_task_error_message
FROM sys.dm_db_vector_indexes AS v
INNER JOIN sys.indexes AS i
    ON i.object_id = v.object_id
    AND i.index_id = v.index_id
WHERE v.object_id = OBJECT_ID(N'dbo.Articles');

C. Identifica gli indici che potrebbero richiedere attenzione

Il seguente esempio utilizza il 15 percento come soglia di monitoraggio illustrativa. Seleziona una soglia adatta al tuo carico di lavoro:

DECLARE @GraphCatchupThreshold decimal(10,2) = 15.0;

SELECT
    OBJECT_SCHEMA_NAME(v.object_id) AS schema_name,
    OBJECT_NAME(v.object_id) AS table_name,
    i.name AS vector_index_name,
    v.graph_catchup_pending_percent,
    v.last_background_task_execution_time,
    v.last_background_task_succeeded,
    v.last_background_task_error_message
FROM sys.dm_db_vector_indexes AS v
INNER JOIN sys.indexes AS i
    ON i.object_id = v.object_id
    AND i.index_id = v.index_id
WHERE
    v.graph_catchup_pending_percent > @GraphCatchupThreshold
    OR v.last_background_task_succeeded = 0
    OR v.last_background_task_error_message IS NOT NULL
ORDER BY v.graph_catchup_pending_percent DESC;