sys.dm_db_vector_indexes (Transact-SQL)

Aplica-se a: SQL Server 2025 (17.x) Base de Dados SQL do AzureAzure SQL Managed InstanceSQL database in Microsoft Fabric

A sys.dm_db_vector_indexes vista de gestão dinâmica devolve informação em tempo real sobre a saúde do índice vetorial e a manutenção em segundo plano. Use esta vista para monitorizar operações de recuperação de grafos DiskANN e identificar índices vetoriais que possam exigir atenção.

Transact-SQL convenções de sintaxe

Nome da coluna Tipo de dados Descrição
object_id int ID de objeto da tabela que contém o índice vetorial.
index_id int ID do índice vetorial.
graph_catchup_pending_percent decimal(10,2) Percentagem aproximada de alterações à espera de serem incorporadas no grafo DiskANN. O valor aproxima-se de zero à medida que a manutenção em segundo plano processa as alterações pendentes. O valor pode ser NULL se nenhuma tarefa de recuperação do grafo tiver sido executada.
quantized_keys_used_percent decimal(10,2) Percentagem do espaço de chaves quantizadas usado pelo índice vetorial.
last_background_task_execution_time datetime2 Tempo em que a tarefa de manutenção em segundo plano mais recente foi executada. NULL se nenhuma tarefa em segundo plano tiver sido executada.
last_background_task_succeeded bit Estado de sucesso da tarefa mais recente de manutenção de antecedentes. 1 indica sucesso, 0 indica falha e NULL indica que nenhuma tarefa em segundo plano foi executada.
last_background_task_duration_seconds bigint Duração da tarefa mais recente de manutenção em segundo plano, em segundos. NULL se nenhuma tarefa em segundo plano tiver sido executada.
last_background_task_processed_inserts bigint Número de inserções processadas pela tarefa de manutenção em segundo plano mais recente. NULL se nenhuma tarefa em segundo plano tiver sido executada.
last_background_task_processed_deletes bigint Número de eliminações processadas pela tarefa de manutenção em segundo plano mais recente. NULL se nenhuma tarefa em segundo plano tiver sido executada.
last_background_task_error_message nvarchar(max) Mensagem de erro reportada pela tarefa de manutenção em segundo plano mais recente. NULL se não foi reportado erro ou nenhuma tarefa em segundo plano foi executada.

Observações

Esta vista devolve uma linha para cada índice vetorial na base de dados atual.

Índices vetoriais utilizam manutenção assíncrona em segundo plano para incorporar modificações de dados, incluindo inserções, atualizações e eliminações, no grafo DiskANN. A graph_catchup_pending_percent coluna mostra a percentagem aproximada de alterações que ainda estão à espera de serem incorporadas no gráfico.

Disponibilidade de funcionalidades

O tipo de dado vetorial e as funções vetoriais estão geralmente disponíveis no SQL Server 2025, Base de Dados SQL do Azure, Azure SQL Managed Instance e base de dados SQL no Fabric.

Os índices vetoriais estão geralmente disponíveis no Base de Dados SQL do Azure, a base de dados SQL no Fabric e Azure SQL Managed Instance configurados com a política de atualizaçãoAlways-up-to-date.

Os índices vetoriais são funcionalidades de pré-visualização no SQL Server 2025 e no Azure SQL Managed Instance configuradas com a política de atualização do SQL Server 2025.

Analisa graph_catchup_pending_percent

A graph_catchup_pending_percent coluna indica a percentagem aproximada de alterações nos dados que ainda não foram incorporadas no gráfico DiskANN.

Quando inseres, atualizas ou eliminas linhas numa tabela com um índice vetorial, as alterações não são imediatamente incorporadas no gráfico. As alterações são enfileiradas e processadas de forma assíncrona por uma tarefa de manutenção em segundo plano.

Espera-se um valor temporário não nulo após modificações dos dados. A percentagem aproxima-se de zero à medida que a manutenção em segundo plano incorpora alterações pendentes no gráfico.

Um valor de zero indica que a manutenção do grafo está em atraso. Um valor NULL pode indicar que nenhuma tarefa de recuperação do grafo foi executada ainda.

Impacto nas consultas VECTOR_SEARCH

VECTOR_SEARCH continua a funcionar enquanto o Graph Catch-Up está em curso. Utiliza o grafo DiskANN atual juntamente com alterações que ainda não estão totalmente incorporadas no gráfico.

Este comportamento significa:

  • VECTOR_SEARCH Ainda pode considerar as linhas recentemente inseridas ou atualizadas.
  • Linhas que não estão totalmente incorporadas no grafo não podem tirar pleno proveito da navegação por grafos.
  • O desempenho ou recordação na pesquisa pode ser afetado enquanto está a ser processado um grande atraso de atraso em grafos.
  • A qualidade e o desempenho da pesquisa são mais previsíveis quando graph_catchup_pending_percent é zero ou permanece consistentemente baixo.

Interpretar os valores de recuperação do grafo

Não existe um limiar universal para uma percentagem elevada de recuperação no gráfico. Um limiar adequado depende da carga de trabalho, taxa de modificação de dados, configuração da base de dados e intervalo de manutenção esperado.

Durante o carregamento em lote ou períodos de elevada atividade DML, espere um aumento temporário na percentagem de recuperação do gráfico. Monitorize se o valor se move para zero depois de a carga de trabalho diminuir.

Investigue o índice vetorial se observar alguma das seguintes condições:

  • Atraso sustentado em gráficos em atraso:graph_catchup_pending_percent mantém-se elevado e não se aproxima de zero.
  • Falha de tarefa em contexto:last_background_task_succeeded é 0.
  • Erro de tarefa em segundo plano:last_background_task_error_message contém um erro.
  • Redução da recordação:VECTOR_SEARCH Retorna menos resultados relevantes do que o esperado.
  • Degradação inesperada do desempenho: A latência da pesquisa vetorial aumenta enquanto o atraso de atraso nos grafos mantém-se elevado.

NULL Os valores das colunas de tarefas em segundo plano não indicam necessariamente uma falha. Podem indicar que ainda não foi executada nenhuma tarefa de manutenção em segundo plano.

Quando reconstruir um índice vetorial

Considere reconstruir um índice vetorial quando observar desempenho mensurável ou degradação da recordação. Não reconstrua um índice apenas com base num valor temporário não nulo graph_catchup_pending_percent .

Cenários em que a reconstrução pode ser adequada incluem:

  • Degradação significativa da recordação: A pesquisa vetorial retorna menos resultados relevantes do que o esperado após a conclusão da recuperação do gráfico.
  • Substituição de dados em grande escala: A maioria ou todos os embeddings são substituídos, como quando os dados são reincorporados com um modelo diferente.
  • Problemas persistentes de manutenção: A percentagem de recuperação do gráfico não diminui e a manutenção em segundo plano falha repetidamente.

Para mais informações, consulte as orientações de qualidade e manutenção de dados para índices vetoriais.

Permissions

Requer permissão VIEW DATABASE STATE no banco de dados.

Examples

A. Monitorizar todos os índices vetoriais

A consulta seguinte devolve informações de atualização em grafos e manutenção em segundo plano para todos os índices vetoriais na base de dados atual:

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 uma tabela específica

A consulta seguinte devolve informação de manutenção do índice vetorial para a dbo.Articles tabela:

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. Identificar índices que possam exigir atenção

O exemplo seguinte utiliza 15 por cento como limiar ilustrativo de monitorização. Selecione um limiar adequado para a sua carga de trabalho:

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;