sys.dm_db_vector_indexes (Transact-SQL)

Se aplica a: SQL Server 2025 (17.x) Azure SQL DatabaseAzure SQL Managed InstanceBase de datos SQL en Microsoft Fabric

La sys.dm_db_vector_indexes vista de gestión dinámica devuelve información en tiempo real sobre la salud del índice vectorial y el mantenimiento en segundo plano. Utiliza esta vista para monitorizar las operaciones de recuperación de grafos DiskANN e identificar índices vectoriales que puedan requerir atención.

Convenciones de sintaxis de Transact-SQL

Nombre de la columna Tipo de dato Descripción
object_id int ID de objeto de la tabla que contiene el índice vectorial.
index_id int ID del índice vectorial.
graph_catchup_pending_percent decimal(10,2) Porcentaje aproximado de cambios que esperan ser incorporados en el grafo DiskANN. El valor se acerca a cero mientras el mantenimiento en segundo plano procesa los cambios pendientes. El valor puede ser NULL si no se ha ejecutado ninguna tarea de recuperación del grafo.
quantized_keys_used_percent decimal(10,2) Porcentaje del espacio de claves cuantizadas utilizado por el índice vectorial.
last_background_task_execution_time datetime2 Momento en que se ejecutó la tarea de mantenimiento en segundo plano más reciente. NULL si no se ha ejecutado ninguna tarea en segundo plano.
last_background_task_succeeded bit Estado de éxito de la tarea de mantenimiento de fondos más reciente. 1 indica éxito, 0 indica fallo e NULL indica que no se ha ejecutado ninguna tarea en segundo plano.
last_background_task_duration_seconds bigint Duración de la tarea de mantenimiento en segundo plano más reciente, en segundos. NULL si no se ha ejecutado ninguna tarea en segundo plano.
last_background_task_processed_inserts bigint Número de insertos procesados por la tarea de mantenimiento en segundo plano más reciente. NULL si no se ha ejecutado ninguna tarea en segundo plano.
last_background_task_processed_deletes bigint Número de eliminaciones procesadas por la tarea de mantenimiento en segundo plano más reciente. NULL si no se ha ejecutado ninguna tarea en segundo plano.
last_background_task_error_message nvarchar(max) Mensaje de error reportado por la tarea de mantenimiento en segundo plano más reciente. NULL si no se ha reportado ningún error o no se ha ejecutado ninguna tarea en segundo plano.

Comentarios

Esta vista devuelve una fila por cada índice vectorial en la base de datos actual.

Los índices vectoriales utilizan mantenimiento asíncrono en segundo plano para incorporar modificaciones de datos, incluyendo inserciones, actualizaciones y eliminaciones, en el grafo DiskANN. La graph_catchup_pending_percent columna muestra el porcentaje aproximado de cambios que aún están esperando a ser incorporados en el gráfico.

Disponibilidad de funcionalidades

El tipo de dato vectorial y las funciones vectoriales están generalmente disponibles en SQL Server 2025, Azure SQL Database, Azure SQL Managed Instance y SQL database en Fabric.

Los índices vectoriales están generalmente disponibles en Azure SQL Database, la base de datos SQL en Fabric y Azure SQL Managed Instance configurados con la política de actualizaciónde fecha Always-up-to.

Los índices vectoriales son funciones de vista previa en SQL Server 2025 y Azure SQL Managed Instance configuradas con la política de actualización de SQL Server 2025.

Analiza graph_catchup_pending_percent

La graph_catchup_pending_percent columna indica el porcentaje aproximado de cambios de datos que aún no se han incorporado en el gráfico DiskANN.

Cuando insertas, actualizas o eliminas filas en una tabla con un índice vectorial, los cambios no se incorporan inmediatamente al gráfico. Los cambios se ponen en cola y se procesan de forma asíncrona mediante una tarea de mantenimiento en segundo plano.

Se espera un valor temporal distinto de cero tras modificaciones de datos. El porcentaje se acerca a cero a medida que el mantenimiento en segundo plano incorpora los cambios pendientes en el gráfico.

Un valor de cero indica que el mantenimiento del gráfico se ha puesto al día. Un valor NULL puede indicar que aún no se ha ejecutado ninguna tarea de recuperación del grafo.

Impacto en las consultas de VECTOR_SEARCH

VECTOR_SEARCH sigue funcionando mientras se está poniendo al día con los gráficos. Utiliza el grafo DiskANN actual junto con cambios que aún no están completamente incorporados en el gráfico.

Este comportamiento significa:

  • VECTOR_SEARCH Aún puedes considerar filas insertadas o actualizadas recientemente.
  • Las filas que no están completamente integradas en el gráfico no pueden aprovechar al máximo la navegación por grafos.
  • El rendimiento o la recuperación de búsqueda pueden verse afectados mientras se procesa un gran retraso en los grafos.
  • La calidad y el rendimiento de búsqueda son más predecibles cuando graph_catchup_pending_percent es cero o se mantiene consistentemente bajo.

Interpretar valores de recuperación de grafos

No existe un umbral universal para un alto porcentaje de recuperación en el gráfico. Un umbral adecuado depende de la carga de trabajo, la tasa de modificación de datos, la configuración de la base de datos y el intervalo de mantenimiento esperado.

Durante la carga por lotes o periodos de alta actividad DML, se espera un aumento temporal en el porcentaje de recuperación del gráfico. Monitoriza si el valor se mueve hacia cero después de que la carga de trabajo disminuye.

Investiga el índice vectorial si observas alguna de las siguientes condiciones:

  • Retraso sostenido en el gráfico de recuperación:graph_catchup_pending_percent se mantiene elevado y no se mueve hacia cero.
  • Fallo de tarea en segundo plano:last_background_task_succeeded es 0.
  • Error de tarea en segundo plano:last_background_task_error_message contiene un error.
  • Reducción de la recuperación:VECTOR_SEARCH devuelve menos resultados relevantes de los esperados.
  • Degradación inesperada del rendimiento: La latencia de búsqueda vectorial aumenta mientras que el retraso en los gráficos sigue siendo elevado.

NULL Los valores de las columnas de tareas en segundo plano no indican necesariamente un fallo. Pueden indicar que aún no se ha ejecutado ninguna tarea de mantenimiento en segundo plano.

Cuándo volver a generar un índice vectorial

Considera reconstruir un índice vectorial cuando observes un rendimiento medible o una degradación en la recuperación. No reconstruyas un índice solo basándote en un valor temporal distinto de cero graph_catchup_pending_percent .

Los escenarios en los que la reconstrucción podría ser adecuada incluyen:

  • Degradación significativa de la recuperación: La búsqueda vectorial devuelve menos resultados relevantes de los esperados tras completar la recuperación del grafo.
  • Reemplazo de datos a gran escala: La mayoría o todas las incrustaciones se reemplazan, como cuando los datos se reincrustan con un modelo diferente.
  • Problemas persistentes de mantenimiento: El porcentaje de recuperación del gráfico no disminuye y el mantenimiento en segundo plano falla repetidamente.

Para más información, consulte la guía de calidad y mantenimiento de datos para índices vectoriales.

Permissions

Requiere permiso VIEW DATABASE STATE en la base de datos.

Examples

A. Supervisión de todos los índices de vectores

La siguiente consulta devuelve información de recuperación de grafos y mantenimiento en segundo plano para todos los índices vectoriales en la base de datos actual:

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. Monitorizar una tabla específica

La siguiente consulta devuelve información de mantenimiento del índice vectorial para la dbo.Articles tabla:

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 los índices que puedan requerir atención

El siguiente ejemplo utiliza el 15 por ciento como umbral ilustrativo de monitorización. Selecciona un umbral adecuado para tu carga de trabajo:

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;