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 2025 (17.x)
Database SQL di Azure
Istanza gestita di SQL di Azure
Database 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_SEARCHpuò 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_percentrimane 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_messagecontiene un errore. -
Richiamo ridotto:
VECTOR_SEARCHrestituisce 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;