sys.dm_db_vector_indexes (Transact-SQL)

Gäller för: SQL Server 2025 (17.x) Azure SQL DatabaseAzure SQL Managed InstanceSQL-databas i Microsoft Fabric

Den dynamiska sys.dm_db_vector_indexes hanteringsvyn ger realtidsinformation om vektorindexets hälsa och bakgrundsunderhåll. Använd denna vy för att övervaka DiskANN-grafens upphämtningsoperationer och identifiera vektorindex som kan kräva uppmärksamhet.

Transact-SQL syntaxkonventioner

Kolumnnamn Datatyp Beskrivning
object_id int Objekt-ID för tabellen som innehåller vektorindexet.
index_id int ID för vektorindexet.
graph_catchup_pending_percent decimal(10,2) Ungefärlig procentandel av ändringar som väntar på att införlivas i DiskANN-grafen. Värdet rör sig mot noll när bakgrundsunderhåll bearbetar de väntande ändringarna. Värdet kan vara NULL om ingen grafupphämtningsuppgift har körts.
quantized_keys_used_percent decimal(10,2) Procentandel av det kvantiserade nyckelutrymmet som används av vektorindexet.
last_background_task_execution_time datetime2 Tid då den senaste bakgrundsunderhållsuppgiften utfördes. NULL om ingen bakgrundsuppgift har körts.
last_background_task_succeeded bit Framgångsstatus för den senaste bakgrundsunderhållsuppgiften. 1 indikerar framgång, 0 indikerar misslyckande och NULL indikerar att ingen bakgrundsuppgift har utförts.
last_background_task_duration_seconds bigint Varaktigheten av den senaste bakgrundsunderhållsuppgiften, i sekunder. NULL om ingen bakgrundsuppgift har körts.
last_background_task_processed_inserts bigint Antal insatser bearbetade av den senaste bakgrundsunderhållsuppgiften. NULL om ingen bakgrundsuppgift har körts.
last_background_task_processed_deletes bigint Antal raderingar som hanteras av den senaste bakgrundsunderhållsuppgiften. NULL om ingen bakgrundsuppgift har körts.
last_background_task_error_message nvarchar(max) Felmeddelande rapporterat av den senaste bakgrundsunderhållsuppgiften. NULL om inget fel rapporterats eller ingen bakgrundsuppgift har körts.

Anmärkningar

Denna vy returnerar en rad för varje vektorindex i den aktuella databasen.

Vektorindex använder asynkront bakgrundsunderhåll för att införliva dataändringar, inklusive insättningar, uppdateringar och borttagningar, i DiskANN-grafen. Kolumnen graph_catchup_pending_percent visar den ungefärliga procentandelen förändringar som fortfarande väntar på att införlivas i grafen.

Tillgänglighet av funktioner

Vektordatatyp- och vektorfunktionerna finns i allmänhet tillgängliga i SQL Server 2025, Azure SQL Database, Azure SQL Managed Instance och SQL Database in Fabric.

Vektorindex finns vanligtvis tillgängliga i Azure SQL Database, SQL-databaser i Fabric och Azure SQL Managed Instance konfigurerade med policyn för alltidup-todatumuppdatering.

Vektorindex är förhandsvisningsfunktioner i SQL Server 2025 och Azure SQL Managed Instance konfigurerade med SQL Server 2025-uppdateringspolicyn.

Analysera graph_catchup_pending_percent

Kolumnen graph_catchup_pending_percent anger den ungefärliga procentandelen dataändringar som ännu inte är inkorporerade i DiskANN-grafen.

När du infogar, uppdaterar eller tar bort rader i en tabell med ett vektorindex införlivas inte ändringarna omedelbart i grafen. Ändringarna köas och behandlas asynkront av en bakgrundsunderhållsuppgift.

Ett tillfälligt icke-noll värde efter dataändringar förväntas. Procentandelen rör sig mot noll när bakgrundsunderhåll inkluderar väntande ändringar i grafen.

Värdet noll indikerar att grafunderhållet har hunnit ikapp. Ett NULL-värde kan indikera att ingen grafupphämtningsuppgift ännu har körts.

Påverkan på VECTOR_SEARCH frågor

VECTOR_SEARCH fortsätter att fungera medan grafupphämtning pågår. Den använder den aktuella DiskANN-grafen tillsammans med ändringar som ännu inte är fullt integrerade i grafen.

Det här beteendet innebär:

  • VECTOR_SEARCH kan fortfarande betrakta nyligen insatta eller uppdaterade rader.
  • Rader som inte är fullt integrerade i grafen kan inte utnyttja grafnavigeringen fullt ut.
  • Sökprestanda eller återkallelse kan påverkas medan en stor eftersläpning av en graf bearbetas.
  • Sökkvalitet och prestanda är mest förutsägbara när graph_catchup_pending_percent den är noll eller förblir konsekvent låg.

Tolka grafens catchup-värden

Det finns ingen universell tröskel för hög grafuppföljningsprocent. En lämplig tröskel beror på arbetsbelastning, dataförändringshastighet, databaskonfiguration och förväntat underhållsintervall.

Under batchlastning eller perioder med hög DML-aktivitet kan man förvänta sig en tillfällig ökning av grafens upphämtningsprocent. Övervaka om värdet rör sig mot noll efter att arbetsbelastningen minskat.

Undersök vektorindexet om du observerar något av följande tillstånd:

  • Uthållig upphämtningsbacklogg i grafen:graph_catchup_pending_percent förblir upphöjd och rör sig inte mot noll.
  • Bakgrundsuppgiftsmisslyckande:last_background_task_succeeded är 0.
  • Bakgrundsuppgiftsfel:last_background_task_error_message innehåller ett fel.
  • Minskad återkallelse:VECTOR_SEARCH Ger färre relevanta resultat än väntat.
  • Oväntad prestandaförsämring: Vektorsökningslatens ökar medan grafens upphämtningseftersläp förblir hög.

NULL Värden för kolumnerna för bakgrundsuppgifter indikerar inte nödvändigtvis ett misslyckande. De kan ange att ingen bakgrundsunderhållsuppgift har utförts än.

När du ska återskapa ett vektorindex

Överväg att bygga om ett vektorindex när du ser mätbar prestanda eller återkallningsförsämring. Bygg inte om ett index baserat enbart på ett tillfälligt icke-noll graph_catchup_pending_percent värde.

Scenarier där återuppbyggnad kan vara lämplig inkluderar:

  • Betydande återkallningsförsämring: Vektorsökning ger färre relevanta resultat än väntat efter att grafens upphämtning är klar.
  • Storskalig dataersättning: De flesta eller alla inbäddningar ersätts, till exempel när data bäddas in igen med en annan modell.
  • Ihållande underhållsproblem: Grafens upphämtningsprocent minskar inte och bakgrundsunderhållet misslyckas upprepade gånger.

För mer information, se Data Quality and Maintenance Guide för vektorindex.

Permissions

Kräver VIEW DATABASE STATE behörighet för databasen.

Examples

A. Övervaka alla vektorindex

Följande fråga returnerar grafens catch-up- och bakgrundsunderhållsinformation för alla vektorindex i den aktuella databasen:

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. Övervaka en specifik tabell

Följande fråga returnerar underhållsinformation för vektorindex för dbo.Articles tabellen:

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. Identifiera index som kan kräva uppmärksamhet

Följande exempel använder 15 procent som en illustrativ övervakningströskel. Välj en tröskel som passar din arbetsbelastning:

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;