sys.dm_db_vector_indexes (Transact-SQL)

Относится к: SQL Server 2025 (17.x) Azure SQL DatabaseSQL Database в Microsoft Fabric

Возвращает аналитические сведения в реальном времени о работоспособности и производительности векторного индекса. Используйте это представление для мониторинга операций обслуживания векторного индекса и определения индексов, требующих внимания.

Соглашения о синтаксисе Transact-SQL

Имя столбца Тип данных Описание
object_id int Идентификатор объекта таблицы.
index_id int Идентификатор индекса.
approximate_staleness_percent decimal(10,2) Процент изменений, ожидающих обновления индекса. Более высокие значения указывают на более ожидающие изменения.
quantized_keys_used_percent decimal(10,2) Процент пространства ключей, потребляемого индексом.
last_background_task_time datetime2 Метка времени последнего фонового обслуживания. Указывает, когда завершена последняя операция обслуживания.
last_background_task_succeeded bit Состояние успешности последней задачи обслуживания. 1 указывает на успешность, 0 указывает на сбой.
last_background_task_duration_seconds bigint Длительность последней задачи обслуживания в секундах.
last_background_task_processed_inserts bigint Количество операций вставки, обработанных в последней задаче обслуживания.
last_background_task_processed_deletes bigint Количество операций удаления, обработанных в последней задаче обслуживания.
last_background_task_error_message nvarchar(max) Сообщение об ошибке, если последняя задача обслуживания завершилась ошибкой. Значение NULL, если задача выполнена успешно.

Замечания

Это представление возвращает сведения обо всех векторных индексах в текущей базе данных. Индексы векторов выполняют фоновое обслуживание для включения изменений DML (вставки, обновления, удаления). Столбец approximate_staleness_percent указывает, сколько изменений ожидается включение в структуру индекса.

Анализ approximate_staleness_percent

Столбец approximate_staleness_percent указывает, какой процент изменений данных еще не обработан задачей фонового обслуживания, которая сохраняет индекс вектора up-to-date. При вставке, обновлении или удалении строк в таблице с векторным индексом эти изменения не сразу включаются в структуру графа DiskANN. Вместо этого изменения помещаются в очередь и обрабатываются задачей фонового обслуживания. Процент устаревания возвращается к 0% по мере обработки невыполненной работы.

Например, если у вас есть таблица с 10 000 строками и векторным индексом, и вы вставляете 500 новых строк, то процент устаревших значений составляет примерно 5% (500 ожидающих изменений из 10500 общих строк). Когда фоновое обслуживание обрабатывает эти 500 вставок, процент устаревания снижается к нулю.

Влияние на запросы VECTOR_SEARCH

VECTOR_SEARCH использует текущее состояние графа DiskANN в сочетании с ожидающими изменениями, которые еще не были полностью включены. Это означает:

  • Даже если устаревшие значения выше нуля, запросы VECTOR_SEARCH по-прежнему возвращают результаты и включают недавно вставленные или обновленные строки.
  • Однако алгоритм поиска не может использовать полную структуру графа для оптимального ранжирования до завершения фонового обслуживания.
  • Точность ранжирования может быть сокращена. Оценки сходства и упорядочение могут быть менее оптимальными для строк, которые еще не полностью интегрированы в структуру индекса.

Качество поиска лучше всего, если все векторы правильно интегрированы в граф и процент устаревших значений равен нулю.

Интерпретация значений устаревших значений

Не существует универсального порогового значения для "высокой" устаревшей работы, так как она зависит от шаблона рабочей нагрузки. Используйте следующие рекомендации для интерпретации отображаемых значений:

  1. Во время пакетной загрузки: 20-30% устаревание, которое снижается до нуля в течение нескольких минут ожидается и нормально.
  2. Во время регулярных операций: 0-5% устаревшей нагрузки указывает, что фоновое обслуживание продолжается в соответствии с рабочей нагрузкой.

Проверьте работоспособность индекса, если вы столкнулись со следующими сценариями:

  • Устойчивый высокий уровень устаревания: значения постоянно выше 10–15% во время регулярных операций предполагают, что фоновое обслуживание не может соответствовать скорости DML.
  • Сокращенный отзыв: вы заметили измеримое падение релевантности VECTOR_SEARCH результатов.
  • Сбои задач: last_background_task_succeeded значение равно 0. Фоновый процесс сталкивается с ошибками и не может обновить индекс.

Когда перестроение векторного индекса

Рекомендуется перестроить векторный индекс при наблюдении за производительностью или снижением отзыва, а не исключительно на основе процента устаревших значений. К сценариям перестроения относятся следующие:

  • Значительное снижение качества отзыва: векторный поиск возвращает меньше релевантных результатов, чем ожидалось
  • Замена крупномасштабных данных: при замене большинства или всех внедрений (например, повторное внедрение с новой моделью)

Подробные рекомендации по сценариям качества данных и обслуживания см. в руководстве по качеству и обслуживанию данных для векторных индексов.

Отслеживайте эту метрику, чтобы понять шаблоны обслуживания индексов и определить индексы, требующие внимания.

Разрешения

Необходимо разрешение VIEW DATABASE STATE на базу данных.

Примеры

А. Мониторинг всех векторных индексов

Следующий запрос отслеживает все векторные индексы в текущей базе данных, показывая состояние устаревших и обслуживания.

SELECT 
    DB_NAME() AS database_name,
    OBJECT_NAME(object_id) AS table_name,
    index_id,
    approximate_staleness_percent,
    last_background_task_succeeded
FROM sys.dm_db_vector_indexes
ORDER BY approximate_staleness_percent DESC;

В. Определение индексов, требующих внимания

Следующий запрос находит векторные индексы с высокой устареванием или недавними сбоями обслуживания.

SELECT 
    OBJECT_NAME(object_id) AS table_name,
    approximate_staleness_percent,
    last_background_task_error_message
FROM sys.dm_db_vector_indexes
WHERE 
    approximate_staleness_percent > 15.0  -- Example value, adjust based on your workload
    OR last_background_task_succeeded = 0  -- Recent failure
ORDER BY approximate_staleness_percent DESC;