sys.dm_db_vector_indexes (Transact-SQL)

Dotyczy: SQL Server 2025 (17.x) Azure SQL DatabaseAzure SQL Managed InstanceBaza danych SQL w Microsoft Fabric

Widok sys.dm_db_vector_indexes dynamicznego zarządzania zwraca informacje w czasie rzeczywistym o stanie indeksu wektorowego i utrzymaniu tła. Użyj tego widoku do monitorowania operacji nadrabiania grafów DiskANN oraz identyfikacji indeksów wektorowych, które mogą wymagać uwagi.

Transact-SQL konwencje składni

Nazwa kolumny Typ danych Opis
object_id int Identyfikator obiektu tabeli zawierającej indeks wektorowy.
index_id int ID indeksu wektorowego.
graph_catchup_pending_percent dziesiętne (10,2) Przybliżony procent zmian oczekujących na włączenie do grafu DiskANN. Wartość ta zbliża się do zera, gdy konserwacja w tle przetwarza oczekujące zmiany. Wartość ta może wynosić się NULL , jeśli żadne zadanie nadchwytywania grafów nie zostało wykonane.
quantized_keys_used_percent dziesiętne (10,2) Procent kwantowanej przestrzeni klucza wykorzystywanej przez indeks wektorowy.
last_background_task_execution_time datetime2 Czas, kiedy wykonano najnowsze zadanie utrzymania w tle. NULL jeśli nie wykonano żadnego zadania w tle.
last_background_task_succeeded bit Status sukcesu ostatniego zadania utrzymania w tle. 1 oznacza sukces, 0 wskazuje na niepowodzenie oraz NULL wskazuje, że nie wykonało żadnego zadania w tle.
last_background_task_duration_seconds bigint Czas trwania ostatniego zadania konserwacji w tle, w sekundach. NULL jeśli nie wykonano żadnego zadania w tle.
last_background_task_processed_inserts bigint Liczba wstawek przetworzonych przez najnowsze zadanie utrzymania w tle. NULL jeśli nie wykonano żadnego zadania w tle.
last_background_task_processed_deletes bigint Liczba usuniętych plików przetworzonych przez najnowsze zadanie utrzymania w tle. NULL jeśli nie wykonano żadnego zadania w tle.
last_background_task_error_message nvarchar(max) Komunikat o błędzie zgłoszony przez najnowsze zadanie konserwacji w tle. NULL jeśli nie zgłoszono żadnego błędu lub nie wykonano zadania w tle.

Uwagi

Ten widok zwraca jeden wiersz dla każdego indeksu wektorowego w aktualnej bazie danych.

Indeksy wektorowe wykorzystują asynchroniczne utrzymanie w tle, aby włączyć modyfikacje danych, w tym wstawianie, aktualizacje i usuwanie w grafie DiskANN. Kolumna graph_catchup_pending_percent pokazuje przybliżony procent zmian, które wciąż czekają na włączenie do wykresu.

Dostępność funkcji

Funkcje typu iwektora są zazwyczaj dostępne w SQL Server 2025, Azure SQL Database, Azure SQL Managed Instance oraz bazie danych SQL w Fabric.

Indeksy wektorowe są zazwyczaj dostępne w Azure SQL Database, baza danych SQL w Fabric, a Azure SQL Managed Instance skonfigurowane z polityką aktualizacjiAlways-up-to-date.

Indeksy wektorowe to funkcje podglądowe w SQL Server 2025 oraz Azure SQL Managed Instance, skonfigurowane z polityką aktualizacji SQL Server 2025.

Przeanalizuj graph_catchup_pending_percent

Kolumna graph_catchup_pending_percent wskazuje przybliżony procent zmian danych, które nie zostały jeszcze uwzględnione w grafie DiskANN.

Gdy wstawiasz, aktualizujesz lub usuwasz wiersze w tabeli z indeksem wektorowym, zmiany nie są od razu włączane do wykresu. Zmiany są kolejkowane i przetwarzane asynchronicznie przez zadanie utrzymania w tle.

Oczekuje się tymczasowej wartości niezerowej po modyfikacji danych. Procent zbliża się do zera, ponieważ utrzymanie w tle uwzględnia oczekujące zmiany na wykresie.

Wartość zero oznacza, że utrzymanie grafu nadrobiło zaległości. Wartość NULL może wskazywać, że żadne zadanie nadchwytywania grafu nie zostało jeszcze wykonane.

Wpływ na zapytania VECTOR_SEARCH

VECTOR_SEARCH nadal działa, podczas gdy trwa doganianie wykresów. Wykorzystuje obecny wykres DiskANN wraz ze zmianami, które nie zostały jeszcze w pełni uwzględnione w grafie.

To zachowanie oznacza:

  • VECTOR_SEARCH nadal można uwzględnić niedawno wstawione lub zaktualizowane wiersze.
  • Wiersze, które nie są w pełni włączone do grafu, nie mogą w pełni wykorzystać nawigacji po wykresie.
  • Wydajność wyszukiwania lub przypomnienie mogą być wpływane podczas przetwarzania dużego backlogu nadrabiania grafów.
  • Jakość wyszukiwania i wydajność są najbardziej przewidywalne, gdy graph_catchup_pending_percent jest zerowa lub pozostaje konsekwentnie niska.

Interpretuj wartości nadrabiania grafu

Nie ma uniwersalnego progu dla wysokiego procentu nadrabiania wykresów. Odpowiedni próg zależy od obciążenia, szybkości modyfikacji danych, konfiguracji bazy danych oraz oczekiwanego interwału konserwacji.

Podczas ładowania wsadowego lub okresów wysokiej aktywności DML należy spodziewać się tymczasowego wzrostu procentu nadrabiania grafów. Monitoruj, czy wartość zbliża się do zera po zmniejszeniu obciążenia.

Zbadaj indeks wektorowy, jeśli zaobserwujesz któreś z następujących warunków:

  • Utrzymujące się zaległości w nadrabianiu wykresów:graph_catchup_pending_percent pozostają podwyższone i nie zbliżają się do zera.
  • Niepowodzenie zadania w tle:last_background_task_succeeded to 0.
  • Błąd zadania w tle:last_background_task_error_message zawiera błąd.
  • Zmniejszone przypomnienie:VECTOR_SEARCH Daje mniej istotnych wyników niż oczekiwano.
  • Nieoczekiwane pogorszenie wydajności: Opóźnienia wyszukiwania wektorowego wzrastają, podczas gdy zaległości nadrabiania grafów pozostają podwyższone.

NULL Wartości dla kolumn zadań w tle niekoniecznie wskazują na porażkę. Mogą wskazać, że żadne zadanie utrzymania w tle nie zostało jeszcze wykonane.

Kiedy należy ponownie skompilować indeks wektora

Rozważ odbudowę indeksu wektorowego, gdy zaobserwujesz mierzalną wydajność lub degradację pamięci. Nie buduj indeksu na podstawie tylko tymczasowej wartości niezerowej graph_catchup_pending_percent .

Scenariusze, w których odbudowa może być odpowiednia, obejmują:

  • Znacząca degradacja pamięci: Wyszukiwanie wektorowe zwraca mniej istotnych wyników niż oczekiwano po zakończeniu nadrabiania wykresów.
  • Wymiana danych na dużą skalę: Większość lub wszystkie osadzenia są wymieniane, na przykład gdy dane są ponownie osadzane w innym modelu.
  • Utrzymujące się problemy z utrzymaniem: Procent nadrabiania wykresów nie maleje, a konserwacja w tle wielokrotnie zawodzi.

Więcej informacji można znaleźć w wytycznych dotyczących jakości danych i utrzymania indeksów wektorowych.

Permissions

Wymaga uprawnienia VIEW DATABASE STATE do bazy danych.

Examples

A. Monitorowanie wszystkich indeksów wektorów

Poniższe zapytanie zwraca informacje o nadrabianiu grafów i utrzymaniu w tle dla wszystkich indeksów wektorowych w aktualnej bazie danych:

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. Monitoruj konkretną tabelę

Następujące zapytanie zwraca informacje o utrzymaniu indeksu wektorowego dla tabeli 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. Zidentyfikuj indeksy, które mogą wymagać uwagi

Poniższy przykład wykorzystuje 15 procent jako ilustracyjny próg monitoringu. Wybierz próg odpowiedni dla Twojego obciążenia:

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;