sys.dm_db_vector_indexes (Transact-SQL)

Aplica-se a: SQL Server 2025 (17.x) Banco de Dados SQL do AzureInstância Gerenciada de SQL do Azurebanco de dados SQL no Microsoft Fabric

A visualização sys.dm_db_vector_indexes de gerenciamento dinâmico retorna informações em tempo real sobre a saúde do índice vetorial e a manutenção em segundo plano. Use essa visão para monitorar operações de recuperação de grafos DiskANN e identificar índices vetoriais que possam exigir atenção.

Convenções de sintaxe de Transact-SQL

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) Porcentagem aproximada de mudanças que aguardam para serem incorporadas ao grafo DiskANN. O valor se move para 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 foi executada.
quantized_keys_used_percent decimal(10,2) Porcentagem do espaço de chaves quantizadas usado pelo índice vetorial.
last_background_task_execution_time datetime2 Hora em que a tarefa de manutenção em segundo plano mais recente foi executada. NULL se nenhuma tarefa em segundo plano foi executada.
last_background_task_succeeded bit Status de sucesso da tarefa mais recente de manutenção de fundo. 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 foi 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 foi executada.
last_background_task_processed_deletes bigint Número de deletações processadas pela tarefa de manutenção em segundo plano mais recente. NULL se nenhuma tarefa em segundo plano foi executada.
last_background_task_error_message nvarchar(max) Mensagem de erro reportada pela tarefa de manutenção em segundo plano mais recente. NULL se nenhum erro foi reportado ou nenhuma tarefa em segundo plano foi executada.

Observações

Essa visualização retorna uma linha para cada índice vetorial no banco 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 deleções, no grafo DiskANN. A graph_catchup_pending_percent coluna mostra a porcentagem aproximada de mudanças que ainda estão aguardando para serem incorporadas ao gráfico.

Disponibilidade de funcionalidades

O tipo de dado vetorial e as funções vetoriais estão geralmente disponíveis no SQL Server 2025, Banco de Dados SQL do Azure, Instância Gerenciada de SQL do Azure e banco de dados SQL no Fabric.

Índices vetoriais geralmente estão disponíveis em Banco de Dados SQL do Azure, banco de dados SQL em Fabric e Instância Gerenciada de SQL do Azure configurados com a política de atualizaçãoAlways-up-to-date.

Índices vetoriais são recursos de pré-visualização no SQL Server 2025 e no Instância Gerenciada de SQL do Azure configurados com a política de atualização do SQL Server 2025.

Analise graph_catchup_pending_percent

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

Quando você insere, atualiza ou exclui linhas em uma tabela com um índice vetorial, as mudanças não são imediatamente incorporadas ao gráfico. As mudanças 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 de dados. A porcentagem se aproxima de zero à medida que a manutenção em segundo plano incorpora as alterações pendentes no gráfico.

Um valor zero indica que a manutenção do gráfico alcançou. Um valor NULL pode indicar que nenhuma tarefa de recuperação do grafo foi executada ainda.

Impacto nas consultas VECTOR_SEARCH

VECTOR_SEARCH continua operando enquanto o Graph Catch Up está em andamento. Ele usa o grafo DiskANN atual junto com mudanças que ainda não foram totalmente incorporadas ao gráfico.

Esse comportamento significa:

  • VECTOR_SEARCH Ainda pode considerar linhas inseridas ou atualizadas recentemente.
  • Linhas que não estão totalmente incorporadas ao grafo não podem aproveitar totalmente a navegação por grafos.
  • O desempenho ou a recuperação de busca podem ser afetados enquanto um grande atraso de atraso em grafos está sendo processado.
  • A qualidade e o desempenho da busca são mais previsíveis quando graph_catchup_pending_percent é zero ou permanece consistentemente baixo.

Interpretar valores de recuperação de grafos

Não existe um limite universal para uma alta porcentagem de recuperação no gráfico. Um limiar apropriado depende da carga de trabalho, taxa de modificação dos dados, configuração do banco de dados e intervalo de manutenção esperado.

Durante o carregamento em lote ou períodos de alta atividade de DML, espere um aumento temporário na porcentagem de recuperação do gráfico. Monitore se o valor se move para zero após a diminuição da carga de trabalho.

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

  • Atraso sustentado de gráficos em atraso:graph_catchup_pending_percent permanece elevado e não se move em direção a zero.
  • Falha de tarefa em segundo plano:last_background_task_succeeded é 0.
  • Erro de tarefa em segundo plano:last_background_task_error_message contém um erro.
  • Redução na recall:VECTOR_SEARCH retorna menos resultados relevantes do que o esperado.
  • Degradação inesperada de desempenho: A latência da busca vetorial aumenta enquanto o atraso de recuperação de grafos permanece elevado.

NULL Valores para as colunas de tarefas em segundo plano não indicam necessariamente uma falha. Eles podem indicar que nenhuma tarefa de manutenção em segundo plano foi executada ainda.

Quando recriar um índice de vetor

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

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

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

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

Permissions

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

Examples

A. Monitorar todos os índices de vetor

A consulta a seguir retorna informações de atualização em gráficos e manutenção de fundo para todos os índices vetoriais no banco 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. Monitore uma tabela específica

A consulta a seguir retorna informações 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. Identifique índices que possam exigir atenção

O exemplo a seguir usa 15% como um limiar ilustrativo de monitoramento. Selecione um limite apropriado para 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;