Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für: SQL Server 2025 (17.x)
Azure SQL-Datenbank
Azure SQL Managed Instance
SQL-Datenbank in Microsoft Fabric
Die sys.dm_db_vector_indexes dynamische Managementansicht liefert Echtzeitinformationen über die Gesundheit des Vektorindex und die Hintergrundpflege. Nutzen Sie diese Ansicht, um DiskANN-Graphen-Catch-up-Operationen zu überwachen und Vektorindizes zu identifizieren, die Aufmerksamkeit erfordern könnten.
Transact-SQL-Syntaxkonventionen
| Spaltenname | Datentyp | Description |
|---|---|---|
object_id |
int | Objekt-ID der Tabelle, die den Vektorindex enthält. |
index_id |
int | ID des Vektorindexes. |
graph_catchup_pending_percent |
Dezimalzahl(10;2) | Ungefährer Prozentsatz der Änderungen, die darauf warten, in den DiskANN-Graphen aufgenommen zu werden. Der Wert bewegt sich gegen null, während die Hintergrundwartung die ausstehenden Änderungen verarbeitet. Der Wert kann sein NULL , wenn keine Graph-Catch-up-Aufgabe ausgeführt wurde. |
quantized_keys_used_percent |
Dezimalzahl(10;2) | Prozentsatz des quantisierten Schlüsselraums, der vom Vektorindex verwendet wird. |
last_background_task_execution_time |
datetime2 | Zeit, in der die letzte Hintergrundwartungsfunktion ausgeführt wurde.
NULL wenn keine Hintergrundaufgabe ausgeführt wurde. |
last_background_task_succeeded |
bit | Erfolgsstatus der jüngsten Hintergrundwartungsaufgabe.
1 zeigt Erfolg an, 0 kennzeichnet Fehlschlag und NULL zeigt an, dass keine Hintergrundaufgabe ausgeführt wurde. |
last_background_task_duration_seconds |
bigint | Dauer der letzten Hintergrundwartungsaufgabe, in Sekunden.
NULL wenn keine Hintergrundaufgabe ausgeführt wurde. |
last_background_task_processed_inserts |
bigint | Anzahl der von der aktuellsten Hintergrundwartungsaufgabe verarbeiteten Einsätze.
NULL wenn keine Hintergrundaufgabe ausgeführt wurde. |
last_background_task_processed_deletes |
bigint | Anzahl der Löschungen, die von der jüngsten Hintergrundwartungs-Aufgabe verarbeitet wurden.
NULL wenn keine Hintergrundaufgabe ausgeführt wurde. |
last_background_task_error_message |
nvarchar(max) | Fehlermeldung gemeldet von der letzten Hintergrundwartungsaufgabe.
NULL wenn kein Fehler gemeldet wurde oder keine Hintergrund-Aufgabe ausgeführt wurde. |
Bemerkungen
Diese Ansicht liefert für jeden Vektorindex in der aktuellen Datenbank eine Zeile zurück.
Vektorindizes verwenden asynchrone Hintergrundpflege, um Datenänderungen, einschließlich Einfügungen, Aktualisierungen und Löschungen, in den DiskANN-Graphen einzubauen. Die Spalte graph_catchup_pending_percent zeigt den ungefähren Prozentsatz der Änderungen, die noch darauf warten, in das Diagramm aufgenommen zu werden.
Verfügbarkeit von Funktionen
Der Vektordatentyp und die Vektorfunktionen sind allgemein in SQL Server 2025, Azure SQL-Datenbank, Azure SQL Managed Instance und SQL Database in Fabric verfügbar.
Vektorindizes sind in der Regel in Azure SQL-Datenbank verfügbar, SQL-Datenbanken in Fabric und Azure SQL Managed Instance mit der Always-up-to-Date-Update-Policy konfiguriert.
Vektorindizes sind Vorschaufunktionen in SQL Server 2025 und Azure SQL Managed Instance, die mit der SQL Server 2025-Update-Richtlinie konfiguriert sind.
Analysiere graph_catchup_pending_percent
Die Spalte graph_catchup_pending_percent zeigt den ungefähren Prozentsatz der Datenänderungen an, die noch nicht in den DiskANN-Graphen einbezogen sind.
Wenn du Zeilen in einer Tabelle mit Vektorindex einfügst, aktualisierst oder löschst, werden die Änderungen nicht sofort in den Graphen integriert. Die Änderungen werden asynchron von einer Hintergrundwartungsaufgabe in die Warteschlange gestellt und verarbeitet.
Ein temporärer Wert von nicht null ist nach Datenänderungen zu erwarten. Der Prozentsatz bewegt sich gegen null, wenn die Hintergrundpflege ausstehende Änderungen in den Graphen einbezieht.
Ein Wert von null zeigt an, dass die Graphenpflege aufgeholt hat. Ein NULL-Wert kann anzeigen, dass noch keine Graph-Catch-up-Aufgabe ausgeführt wurde.
Auswirkungen auf VECTOR_SEARCH Abfragen
VECTOR_SEARCH läuft weiterhin, während Graph Catch Up läuft. Es verwendet den aktuellen DiskANN-Graphen zusammen mit Änderungen, die noch nicht vollständig in den Graphen integriert sind.
Dieses Verhalten bedeutet:
-
VECTOR_SEARCHkann weiterhin kürzlich eingefügte oder aktualisierte Zeilen in Betracht ziehen. - Zeilen, die nicht vollständig in das Diagramm integriert sind, können die Graphnavigation nicht voll ausnutzen.
- Die Suchleistung oder der Abruf können beeinträchtigt werden, während ein großer Graphenrückstau verarbeitet wird.
- Suchqualität und -performance sind am vorhersehbarsten, wenn
graph_catchup_pending_percentsie null sind oder konstant niedrig bleiben.
Graph-Nachholwerte interpretieren
Es gibt keine universelle Schwelle für eine hohe Graphen-Aufholquote. Ein angemessener Schwellenwert hängt von der Arbeitsbelastung, der Datenänderungsrate, der Datenbankkonfiguration und dem erwarteten Wartungsintervall ab.
Während des Batch-Ladens oder in Phasen hoher DML-Aktivität ist mit einem vorübergehenden Anstieg des Graph-Catch-up-Prozentsatzes zu rechnen. Überwachen Sie, ob der Wert nach Abnahme der Arbeitsbelastung gegen null geht.
Untersuchen Sie den Vektorindex, wenn Sie eine der folgenden Bedingungen beobachten:
-
Anhaltender Rückstand
graph_catchup_pending_percentim Diagramm: bleibt erhöht und bewegt sich nicht auf null zu. -
Fehlermeldung der Hintergrundaufgabe:
last_background_task_succeededist 0. -
Fehler bei Hintergrundaufgaben:
last_background_task_error_messageenthält einen Fehler. -
Reduzierter Rückruf:
VECTOR_SEARCHLiefert weniger relevante Ergebnisse als erwartet. - Unerwartete Leistungsverschlechterung: Die Vektorsuch-Latenz steigt, während der Rückstau beim Graphenaufholen erhöht bleibt.
NULL Die Werte für die Spalten der Hintergrundaufgaben deuten nicht unbedingt auf einen Fehler hin. Sie können anzeigen, dass noch keine Hintergrundwartungsaufgabe ausgeführt wurde.
Wann ein Vektorindex neu erstellt werden soll
Erwägen Sie, einen Vektorindex neu aufzubauen, wenn Sie messbare Leistung oder Rückrufverschlechterung beobachten. Baue keinen Index nur auf Basis eines temporären von null graph_catchup_pending_percent verschiedenen Werts neu auf.
Szenarien, in denen ein Wiederaufbau sinnvoll sein könnte, sind:
- Signifikante Rückrufverschlechterung: Die Vektorsuche liefert weniger relevante Ergebnisse als erwartet nach Abschluss des Graph-Catch-ups.
- Großflächige Datenersetzung: Die meisten oder alle Einbettungen werden ersetzt, etwa wenn Daten mit einem anderen Modell neu eingebettet werden.
- Persistente Wartungsprobleme: Der Graph-Catch-up-Prozentsatz nimmt nicht ab und die Hintergrundpflege scheitert wiederholt.
Für weitere Informationen siehe Leitlinien zur Datenqualität und -pflege für Vektorindizes.
Erlaubnisse
Erfordert die VIEW DATABASE STATE-Berechtigung für die Datenbank.
Examples
A. Überwachen aller Vektorindizes
Die folgende Abfrage liefert Graph-Catch-up- und Hintergrundpflegeinformationen für alle Vektorindizes in der aktuellen Datenbank:
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. Überwachen Sie eine bestimmte Tabelle
Die folgende Abfrage liefert Vektorindex-Wartungsinformationen für die dbo.Articles Tabelle:
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. Identifizieren Sie Indizes, die Aufmerksamkeit erfordern könnten
Das folgende Beispiel verwendet 15 Prozent als illustrative Überwachungsgrenze. Wählen Sie eine Schwelle aus, die für Ihre Arbeitsbelastung geeignet ist:
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;