sys.dm_db_vector_indexes (Transact-SQL)

Van toepassing op: SQL Server 2025 (17.x) Azure SQL DatabaseAzure SQL Managed InstanceSQL-database in Microsoft Fabric

De sys.dm_db_vector_indexes dynamische beheerweergave geeft realtime informatie terug over de gezondheid van de vectorindex en het onderhoud van de achtergrond. Gebruik deze weergave om DiskANN-grafieken te monitoren en vectorindexen te identificeren die mogelijk aandacht vereisen.

Transact-SQL syntaxis-conventies

Kolomnaam Gegevenstype Beschrijving
object_id int Object-ID van de tabel die de vectorindex bevat.
index_id int ID van de vectorindex.
graph_catchup_pending_percent decimal(10,2) Geschatte procentuele wijzigingen die wachten om in de DiskANN-grafiek te worden opgenomen. De waarde beweegt richting nul terwijl achtergrondonderhoud de in behandeling staande wijzigingen verwerkt. De waarde kan zijn NULL als er geen graaf-inhalingstaak is uitgevoerd.
quantized_keys_used_percent decimal(10,2) Percentage van de gekwantiseerde sleutelruimte dat door de vectorindex wordt gebruikt.
last_background_task_execution_time datetime2 Tijd wanneer de meest recente achtergrondonderhoudstaak werd uitgevoerd. NULL als er geen achtergrondtaak is uitgevoerd.
last_background_task_succeeded bit Successtatus van de meest recente achtergrondonderhoudstaak. 1 geeft succes aan, 0 duidt falen aan en NULL geeft aan dat er geen achtergrondtaak is uitgevoerd.
last_background_task_duration_seconds bigint Duur van de meest recente achtergrondonderhoudstaak, in enkele seconden. NULL als er geen achtergrondtaak is uitgevoerd.
last_background_task_processed_inserts bigint Aantal inserts verwerkt door de meest recente achtergrondonderhoudstaak. NULL als er geen achtergrondtaak is uitgevoerd.
last_background_task_processed_deletes bigint Aantal verwijderingen verwerkt door de meest recente achtergrondonderhoudstaak. NULL als er geen achtergrondtaak is uitgevoerd.
last_background_task_error_message nvarchar(max) Foutmelding gemeld door de meest recente achtergrondonderhoudstaak. NULL als er geen fout is gemeld of er geen achtergrondtaak is uitgevoerd.

Opmerkingen

Deze weergave geeft één rij terug voor elke vectorindex in de huidige database.

Vectorindexen gebruiken asynchrone achtergrondonderhoud om datawijzigingen, waaronder inserts, updates en deletes, in de DiskANN-graaf op te nemen. De graph_catchup_pending_percent kolom toont het geschatte percentage veranderingen dat nog wacht om in de grafiek te worden opgenomen.

Beschikbaarheid van functies

Het vectordatatype en de vectorfuncties zijn algemeen beschikbaar in SQL Server 2025, Azure SQL Database, Azure SQL Managed Instance en SQL database in Fabric.

Vectorindexen zijn over het algemeen beschikbaar in Azure SQL Database, SQL-databases in Fabric en Azure SQL Managed Instance geconfigureerd met het Always-up-to-date-updatebeleid.

Vectorindexen zijn previewfuncties in SQL Server 2025 en Azure SQL Managed Instance die zijn geconfigureerd met het SQL Server 2025 updatebeleid.

Analyseer graph_catchup_pending_percent

De graph_catchup_pending_percent kolom geeft het geschatte percentage datawijzigingen aan die nog niet in de DiskANN-grafiek zijn opgenomen.

Wanneer je rijen invoegt, bijwerkt of verwijdert in een tabel met een vectorindex, worden de wijzigingen niet direct in de grafiek opgenomen. De wijzigingen worden asynchroon in de wachtrij geplaatst en verwerkt door een achtergrondonderhoudstaak.

Een tijdelijke niet-nul waarde na datawijzigingen wordt verwacht. Het percentage beweegt richting nul terwijl achtergrondonderhoud wachtende wijzigingen in de grafiek opneemt.

Een waarde van nul geeft aan dat het grafonderhoud is ingehaald. Een NULL-waarde kan aangeven dat er nog geen graaf-inhalingstaak is uitgevoerd.

Invloed op VECTOR_SEARCH query's

VECTOR_SEARCH blijft actief terwijl de Graph Catch-up gaande is. Het gebruikt de huidige DiskANN-grafiek samen met wijzigingen die nog niet volledig in de grafiek zijn opgenomen.

Dit gedrag betekent:

  • VECTOR_SEARCH Kan nog steeds recent ingevoegde of bijgewerkte rijen overwegen.
  • Rijen die niet volledig in de grafiek zijn opgenomen, kunnen niet volledig profiteren van grafieknavigatie.
  • Zoekprestaties of terugroepacties kunnen worden beïnvloed terwijl een grote achterstand in de grafiek wordt verwerkt.
  • De zoekkwaliteit en prestaties zijn het meest voorspelbaar wanneer graph_catchup_pending_percent nul is of consequent laag blijft.

Interpreteer graf-inhaalwaarden

Er is geen universele drempel voor een hoog inhaalpercentage in grafieken. Een passende drempel hangt af van de werklast, het tempo van datawijziging, de databaseconfiguratie en het verwachte onderhoudsinterval.

Tijdens batch-loading of periodes van hoge DML-activiteit kunt u een tijdelijke toename van het inhaalpercentage in de grafiek verwachten. Controleer of de waarde richting nul beweegt nadat de werklast is afgenomen.

Onderzoek de vectorindex als je een van de volgende omstandigheden waarneemt:

  • Aanhoudende achterstand in grafiekinhalen:graph_catchup_pending_percent blijft verhoogd en beweegt niet richting nul.
  • Achtergrondtaak mislukt:last_background_task_succeeded is 0.
  • Achtergrondtaakfout:last_background_task_error_message bevat een fout.
  • Verminderde terugroepactie:VECTOR_SEARCH levert minder relevante resultaten op dan verwacht.
  • Onverwachte prestatieverlies: De latentie bij vectorzoekopdrachten neemt toe, terwijl de achterstand bij de inhaaldata in de grafiek verhoogd blijft.

NULL Waarden voor de achtergrondtaakkolommen duiden niet per se op een mislukking. Ze kunnen aangeven dat er nog geen achtergrondonderhoudstaak is uitgevoerd.

Wanneer een vectorindex opnieuw moet worden opgebouwd

Overweeg het opnieuw opbouwen van een vectorindex wanneer je meetbare prestaties of achteruitgang van de herinneringen ziet. Bouw geen index opnieuw op basis van alleen een tijdelijke niet-nul graph_catchup_pending_percent waarde.

Scenario's waarin herbouw passend kan zijn zijn onder andere:

  • Significante achteruitgang van de herinnering: Vectorzoekopdracht levert minder relevante resultaten op dan verwacht nadat de inhaalscore van de grafiek is voltooid.
  • Grootschalige gegevensvervanging: De meeste of alle embeddings worden vervangen, bijvoorbeeld wanneer data opnieuw wordt ingebed met een ander model.
  • Persistente onderhoudsproblemen: Het inhaalpercentage in de grafiek daalt niet en achtergrondonderhoud faalt herhaaldelijk.

Voor meer informatie, zie richtlijnen voor gegevenskwaliteit en onderhoud voor vectorindexen.

Permissions

Vereist VIEW DATABASE STATE machtiging voor de database.

Examples

A. Alle vectorindexen bewaken

De volgende query geeft grafiekinhalen en achtergrondonderhoudsinformatie voor alle vectorindexen in de huidige database:

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. Houd een specifieke tabel in de gaten

De volgende query geeft vectorindexonderhoudsinformatie voor de dbo.Articles tabel terug:

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. Identificeer indexen die aandacht nodig hebben

Het volgende voorbeeld gebruikt 15 procent als illustratieve monitoringsdrempel. Kies een drempel die geschikt is voor jouw werkdruk:

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;