Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: SQL Server 2025 (17.x)
Azure SQL Database
Azure SQL Managed Instance
Baza 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_SEARCHnadal 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_percentjest 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_percentpozostają podwyższone i nie zbliżają się do zera. -
Niepowodzenie zadania w tle:
last_background_task_succeededto 0. -
Błąd zadania w tle:
last_background_task_error_messagezawiera błąd. -
Zmniejszone przypomnienie:
VECTOR_SEARCHDaje 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;