Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S'applique à : SQL Server 2025 (17.x)
Azure SQL Database
Azure SQL Managed Instance
Base de données SQL dans Microsoft Fabric
La sys.dm_db_vector_indexes vue de gestion dynamique renvoie en temps réel des informations sur la santé de l’indice vectoriel et la maintenance en arrière-plan. Utilisez cette vue pour surveiller les opérations de rattrapage des graphes DiskANN et identifier les index vectoriels qui pourraient nécessiter une attention.
Conventions de la syntaxe Transact-SQL
| Nom de la colonne | Type de données | Description |
|---|---|---|
object_id |
int | ID d’objet de la table contenant l’index vectoriel. |
index_id |
int | ID de l’indice vectoriel. |
graph_catchup_pending_percent |
décimal(10,2) | Pourcentage approximatif de modifications en attente d’être intégrées dans le graphe DiskANN. La valeur se tend vers zéro à mesure que la maintenance en arrière-plan traite les modifications en attente. La valeur peut être NULL si aucune tâche de rattrapage du graphe n’a été exécutée. |
quantized_keys_used_percent |
décimal(10,2) | Pourcentage de l’espace de clés quantifié utilisé par l’indice vectoriel. |
last_background_task_execution_time |
datetime2 | Le moment où la dernière tâche de maintenance en arrière-plan a été exécutée.
NULL si aucune tâche en arrière-plan n’a été exécutée. |
last_background_task_succeeded |
bit | Statut de réussite de la dernière tâche de maintenance en arrière-plan.
1 indique le succès, 0 indique l’échec, et NULL indique qu’aucune tâche en arrière-plan n’a été exécutée. |
last_background_task_duration_seconds |
bigint | Durée de la dernière tâche de maintenance en arrière-plan, en quelques secondes.
NULL si aucune tâche en arrière-plan n’a été exécutée. |
last_background_task_processed_inserts |
bigint | Nombre d’inserts traités par la tâche de maintenance en arrière-plan la plus récente.
NULL si aucune tâche en arrière-plan n’a été exécutée. |
last_background_task_processed_deletes |
bigint | Nombre de suppressions traitées par la tâche de maintenance en arrière-plan la plus récente.
NULL si aucune tâche en arrière-plan n’a été exécutée. |
last_background_task_error_message |
nvarchar(max) | Message d’erreur signalé par la tâche de maintenance en arrière-plan la plus récente.
NULL si aucune erreur n’a été signalée ou qu’aucune tâche en arrière-plan n’a été exécutée. |
Remarques
Cette vue renvoie une ligne pour chaque index vectoriel dans la base de données actuelle.
Les index vectoriels utilisent la maintenance asynchrone en arrière-plan pour intégrer des modifications de données, y compris les insertions, mises à jour et suppressions, dans le graphe DiskANN. La graph_catchup_pending_percent colonne montre le pourcentage approximatif de changements qui attendent encore d’être intégrés dans le graphique.
Disponibilité des fonctionnalités
Le type de données vectoriel et les fonctions vectorielles sont généralement disponibles dans SQL Server 2025, Azure SQL Database, Azure SQL Managed Instance et SQL Database dans Fabric.
Les index vectoriels sont généralement disponibles dans Azure SQL Database, la base de données SQL dans Fabric, et Azure SQL Managed Instance configurés selon la politique de mise à jourAlways-up-todate.
Les index vectoriels sont des fonctionnalités d’aperçu dans SQL Server 2025 et Azure SQL Managed Instance, configurées avec la politique de mise à jour SQL Server 2025.
Analysez graph_catchup_pending_percent
La graph_catchup_pending_percent colonne indique le pourcentage approximatif de changements de données qui ne sont pas encore intégrés dans le graphique DiskANN.
Lorsque vous insérez, mettez à jour ou supprimez des lignes dans une table avec un index vectoriel, les modifications ne sont pas immédiatement intégrées dans le graphique. Les modifications sont mises en file d’attente et traitées de manière asynchrone par une tâche de maintenance en arrière-plan.
Une valeur temporaire non nulle après modifications des données est attendue. Le pourcentage tend vers zéro à mesure que la maintenance en arrière-plan intègre les modifications en attente dans le graphique.
Une valeur de zéro indique que la maintenance du graphique a rattrapé son retard. Une valeur NULL peut indiquer qu’aucune tâche de rattrapage dans le graphe n’a encore été exécutée.
Impact sur les requêtes VECTOR_SEARCH
VECTOR_SEARCH continue d’opérer pendant que Graph rattrape son retard. Il utilise le graphe DiskANN actuel ainsi que des modifications qui ne sont pas encore entièrement intégrées dans le graphe.
Ce comportement signifie :
-
VECTOR_SEARCHPeut toujours prendre en compte les lignes récemment insérées ou mises à jour. - Les lignes qui ne sont pas entièrement intégrées au graphe ne peuvent pas tirer pleinement parti de la navigation dans les graphes.
- La performance ou le rappel de recherche peuvent être affectés pendant qu’un important retard de rattrapage graphique est en cours de traitement.
- La qualité et les performances de la recherche sont les plus prévisibles lorsqu’elles
graph_catchup_pending_percentsont nulles ou restent constamment basses.
Interpréter les valeurs de rattrapage des graphes
Il n’y a pas de seuil universel pour un pourcentage élevé de rattrapage graphique. Un seuil approprié dépend de la charge de travail, du taux de modification des données, de la configuration de la base de données et de l’intervalle de maintenance attendu.
Lors du chargement par lots ou des périodes d’activité DML élevée, on peut s’attendre à une augmentation temporaire du pourcentage de rattrapage des graphes. Surveillez si la valeur se dirige vers zéro après la diminution de la charge de travail.
Étudiez l’indice vectoriel si vous observez l’une des conditions suivantes :
-
Retard soutenu des graphiques :
graph_catchup_pending_percentreste élevé et ne se dirige pas vers zéro. -
Échec de tâche en arrière-plan :
last_background_task_succeededest 0. -
Erreur de tâche en arrière-plan :
last_background_task_error_messagecontient une erreur. -
Rappel réduit :
VECTOR_SEARCHDonne moins de résultats pertinents que prévu. - Dégradation inattendue des performances : La latence de la recherche vectorielle augmente tandis que le retard de rattrapage des graphes reste élevé.
NULL Les valeurs des colonnes de tâche en arrière-plan n’indiquent pas nécessairement un échec. Ils peuvent indiquer qu’aucune tâche de maintenance en arrière-plan n’a encore été exécutée.
Quand reconstruire un index vectoriel
Envisagez de reconstruire un indice vectoriel lorsque vous observez une performance mesurable ou une dégradation du rappel. Ne reconstruis pas un indice uniquement sur une valeur temporaire non nulle graph_catchup_pending_percent .
Les scénarios où la reconstruction pourrait être appropriée incluent :
- Dégradation significative du rappel : La recherche vectorielle restitue moins de résultats pertinents que prévu après la fin du rattrapage du graphe.
- Remplacement de données à grande échelle : La plupart ou la totalité des embeddings sont remplacés, par exemple lorsque les données sont réintégrées dans un modèle différent.
- Problèmes persistants de maintenance : Le pourcentage de rattrapage du graphique ne diminue pas et la maintenance en arrière-plan échoue à plusieurs reprises.
Pour plus d’informations, consultez les directives sur la qualité des données et la maintenance pour les indices vectoriels.
Permissions
Requiert l'autorisation VIEW DATABASE STATE sur la base de données.
Examples
A. Surveiller tous les index vectoriels
La requête suivante restitue les informations de rattrapage des graphes et de maintenance en arrière-plan pour tous les index vectoriels de la base de données actuelle :
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. Surveillez une table spécifique
La requête suivante retourne les informations de maintenance de l’index vectoriel pour le dbo.Articles tableau :
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. Identifiez les indices qui pourraient nécessiter une attention
L’exemple suivant utilise 15 % comme seuil illustratif de surveillance. Sélectionnez un seuil adapté à votre charge de travail :
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;