Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a: SQL Server 2025 (17.x)
Banco de Dados SQL do Azure
Instância Gerenciada de SQL do Azure
banco 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_SEARCHAinda 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_percentpermanece 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_messagecontém um erro. -
Redução na recall:
VECTOR_SEARCHretorna 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;