sys.dm_db_vector_indexes (Transact-SQL)

Platí pro: SQL Server 2025 (17.x) Azure SQL DatabaseSpravovaná instance Azure SQLSQL databáze v Microsoft Fabric

Dynamický sys.dm_db_vector_indexes pohled správy vrací informace v reálném čase o stavu vektorového indexu a údržbě pozadí. Použijte tento pohled ke sledování operací dohání grafů DiskANN a identifikaci vektorových indexů, které mohou vyžadovat pozornost.

Transact-SQL konvence syntaxe

Název sloupce Datový typ Description
object_id int ID objektu tabulky, která obsahuje vektorový index.
index_id int ID vektorového indexu.
graph_catchup_pending_percent decimal(10;2) Přibližné procento změn čekajících na začlenění do grafu DiskANN. Hodnota se blíží nule, jak údržba na pozadí zpracovává čekající změny. Hodnota může být NULL , pokud nebyla vykonána žádná úloha dohnání grafu.
quantized_keys_used_percent decimal(10;2) Procento kvantovaného klíčového prostoru využívaného vektorovým indexem.
last_background_task_execution_time datetime2 Čas, kdy byla vykonána poslední úloha údržby na pozadí. NULL pokud žádný background task nebyl vykonán.
last_background_task_succeeded bit Úspěšnost poslední údržby na pozadí. 1 označuje úspěch, 0 znamená neúspěch a NULL uvádí, že žádný úkol na pozadí nebyl vykonán.
last_background_task_duration_seconds bigint Délka poslední údržby na pozadí, v sekundách. NULL pokud žádný background task nebyl vykonán.
last_background_task_processed_inserts bigint Počet insertů zpracovaných nejnovější údržbovou úlohou na pozadí. NULL pokud žádný background task nebyl vykonán.
last_background_task_processed_deletes bigint Počet smazání zpracovaných nejnovější úlohou údržby na pozadí. NULL pokud žádný background task nebyl vykonán.
last_background_task_error_message nvarchar(max) Chybová zpráva hlášená nejnovější údržbou na pozadí. NULL pokud nebyla hlášena žádná chyba nebo nebyl vykonán žádný úkol na pozadí.

Poznámky

Tento pohled vrací jeden řádek pro každý vektorový index v aktuální databázi.

Vektorové indexy využívají asynchronní údržbu na pozadí k začlenění úprav dat, včetně vkládání, aktualizací a mazání, do grafu DiskANN. Sloupec graph_catchup_pending_percent ukazuje přibližné procento změn, které stále čekají na začlenění do grafu.

Dostupnost funkcí

Vektorové datové typy a vektorové funkce jsou obecně dostupné v SQL Server 2025, Azure SQL Database, Azure SQL Managed Instance a SQL databázi ve Fabric.

Vektorové indexy jsou obecně dostupné v Azure SQL Database, SQL databáze v Fabric a Azure SQL Managed Instance konfigurovány s pravidlem aktualizacevždyup-todatum.

Vector indexy jsou náhledové funkce v SQL Server 2025 a Azure SQL Managed Instance, konfigurované s aktualizační politikou SQL Server 2025.

Analyzujte graph_catchup_pending_percent

Sloupec graph_catchup_pending_percent ukazuje přibližné procento změn dat, které ještě nejsou zahrnuty do grafu DiskANN.

Když vložíte, aktualizujete nebo smažete řádky v tabulce s vektorovým indexem, změny nejsou okamžitě začleněny do grafu. Změny jsou zařazovány do fronty a zpracovávány asynchronně pomocí údržby na pozadí.

Po úpravě dat se očekává dočasná nenulová hodnota. Procento se posouvá k nule, protože údržba na pozadí zahrnuje do grafu očekávané změny.

Hodnota nula znamená, že údržba grafu dohnala. Hodnota NULL může naznačovat, že dohání grafu dosud nebylo provedeno.

Dopad na dotazy VECTOR_SEARCH

VECTOR_SEARCH pokračuje v provozu, zatímco probíhá dohání grafů. Používá aktuální graf DiskANN spolu se změnami, které dosud nejsou plně začleněny do grafu.

Toto chování znamená:

  • VECTOR_SEARCH stále lze považovat za nedávno vložené nebo aktualizované řádky.
  • Řádky, které nejsou plně začleněny do grafu, nemohou plně využít navigaci v grafu.
  • Výkon vyhledávání nebo vybavování může být ovlivněn, zatímco se zpracovává velký backlog pro dohnání grafů.
  • Kvalita vyhledávání a výkon jsou nejlépe předvídatelné, když graph_catchup_pending_percent je nulová nebo zůstává konzistentně nízká.

Interpretace hodnot dohání grafu

Neexistuje univerzální hranice pro vysoké procento dohnání grafů. Vhodný práh závisí na zátěži, rychlosti úprav dat, konfiguraci databáze a očekávaném intervalu údržby.

Během hromadného načítání nebo období vysoké aktivity DML očekávejte dočasné zvýšení procenta dohnání grafů. Sledujte, zda se hodnota po poklesu pracovní zátěže posouvá k nule.

Prozkoumejte vektorový index, pokud pozorujete některou z následujících podmínek:

  • Trvalý zpoždění v dohnání grafů:graph_catchup_pending_percent zůstává zvýšené a nepohybuje se směrem k nule.
  • Selhání pozadí úkolu:last_background_task_succeeded je 0.
  • Chyba v pozadí úkolu:last_background_task_error_message obsahuje chybu.
  • Snížené vybavování:VECTOR_SEARCH Přináší méně relevantních výsledků, než se očekávalo.
  • Neočekávané zhoršení výkonu: Latence vektorového vyhledávání roste, zatímco backlog dohání grafů zůstává zvýšený.

NULL Hodnoty sloupců pozadí úkolů nemusí nutně znamenat selhání. Mohou uvádět, že žádná údržba na pozadí ještě nebyla provedena.

Kdy znovu sestavit vektorový index

Zvažte přestavbu vektorového indexu, když pozorujete měřitelný výkon nebo zhoršení pamatování. Nevytvářejte index přestavovat jen na základě dočasné nenulové graph_catchup_pending_percent hodnoty.

Scénáře, ve kterých by byla rekonstrukce vhodná, zahrnují:

  • Významné zhoršení paměti: Vektorové vyhledávání vrací méně relevantních výsledků, než se očekávalo, po dokončení dohání grafu.
  • Velkoplošná výměna dat: Většina nebo všechna embeddingy jsou nahrazeny, například když jsou data znovu vložena do jiného modelu.
  • Přetrvávající problémy s údržbou: Procento dohnání grafů se nesnižuje a údržba na pozadí opakovaně selhává.

Pro více informací viz pokyny k kvalitě dat a údržbě vektorových indexů.

Povolení

Vyžaduje VIEW DATABASE STATE oprávnění k databázi.

Examples

A. Monitorování všech vektorových indexů

Následující dotaz vrací informace o dohnání grafu a údržbě na pozadí pro všechny vektorové indexy v aktuální databázi:

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. Sledujte konkrétní tabulku

Následující dotaz vrací informace o údržbě vektorového indexu pro tabulku dbo.Articles :

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. Identifikujte indexy, které by mohly vyžadovat pozornost

Následující příklad používá 15 procent jako ilustrativní prah monitorování. Vyberte si práh vhodný pro vaši pracovní zátěž:

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;