sys.dm_db_vector_indexes (Transact-SQL)

Gilt für: SQL Server 2025 (17.x) Azure SQL-DatenbankAzure SQL Managed InstanceSQL-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_SEARCH kann 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_percent sie 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ückstandgraph_catchup_pending_percent im Diagramm: bleibt erhöht und bewegt sich nicht auf null zu.
  • Fehlermeldung der Hintergrundaufgabe:last_background_task_succeeded ist 0.
  • Fehler bei Hintergrundaufgaben:last_background_task_error_message enthält einen Fehler.
  • Reduzierter Rückruf:VECTOR_SEARCH Liefert 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;