Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questa pagina descrive come usare la tabella di sistema del log di controllo per trovare gli endpoint di ricerca vettoriali con indici ma che non ricevono traffico di query. Gli endpoint inutilizzati usano le risorse e comportano costi senza fornire valore. L'identificazione degli endpoint inutilizzati consente di pulire le risorse inutilizzate e ridurre i costi.
Requisiti
- Un'area di lavoro abilitata per il Catalogo di Unity.
- Accesso alla
system.access.audittabella. Per impostazione predefinita, solo gli amministratori dell'account hanno accesso. Per concedere l'accesso ad altri utenti, consulta il riferimento alla tabella di sistema del registro di controllo. - Un ambiente di calcolo SQL Warehouse o serverless per l'esecuzione di query.
Come funziona
La system.access.audit tabella registra ogni chiamata API di ricerca vettoriale come evento con service_name = 'vectorSearch'. Sono inclusi la creazione dell'indice, la cancellazione, le query, gli upsert e le scansioni.
Un singolo endpoint può servire più indici. Per trovare gli endpoint inutilizzati, confrontare il set di indici esistenti (creati ma non eliminati) con il set di indici che hanno ricevuto il traffico di query in un determinato intervallo di tempo, quindi aggregarlo al livello dell'endpoint. Un endpoint viene inutilizzato solo quando nessuno dei relativi indici ha ricevuto query.
Il log di controllo conserva i dati per 365 giorni, quindi puoi consultare fino a un anno passato.
Annotazioni
Il log di controllo registra le query a livello di indice, non a livello di endpoint. Le interrogazioni in questa guida mappano gli indici agli endpoint usando il endpoint_name registrato al momento della creazione dell'indice.
Trovare endpoint inutilizzati
La query seguente identifica gli endpoint in cui nessun indice ha ricevuto alcuna query negli ultimi 30 giorni. Usa gli eventi del log di controllo per determinare quali indici sono stati creati, quali sono stati eliminati e quale traffico di query ha ricevuto, quindi aggrega al livello di endpoint.
Importante
Questa query determina gli indici attivi confrontando gli eventi createVectorIndex e deleteVectorIndex nel log di controllo. Se un indice è stato creato più di 365 giorni fa (prima della finestra di conservazione del log di controllo), non viene visualizzato nei risultati. Per un'immagine completa, incrociare questi risultati con l'output del metodo di ricerca SDK list_indexes vettoriale.
WITH created_indexes AS (
-- All indexes created in the last year
SELECT DISTINCT
request_params['name'] AS index_name,
request_params['endpoint_name'] AS endpoint_name
FROM system.access.audit
WHERE service_name = 'vectorSearch'
AND action_name = 'createVectorIndex'
AND event_date >= current_date() - INTERVAL 365 DAYS
),
deleted_indexes AS (
-- Indexes that have been deleted
SELECT DISTINCT
request_params['name'] AS index_name
FROM system.access.audit
WHERE service_name = 'vectorSearch'
AND action_name = 'deleteVectorIndex'
AND event_date >= current_date() - INTERVAL 365 DAYS
),
active_indexes AS (
-- Indexes that exist (created but not deleted)
SELECT ci.index_name, ci.endpoint_name
FROM created_indexes ci
LEFT JOIN deleted_indexes di ON ci.index_name = di.index_name
WHERE di.index_name IS NULL
),
queried_indexes AS (
-- Indexes that received queries in the last 30 days
SELECT DISTINCT
request_params['name'] AS index_name
FROM system.access.audit
WHERE service_name = 'vectorSearch'
AND action_name IN (
'queryVectorIndex',
'queryVectorIndexNextPage',
'scanVectorIndex'
)
AND event_date >= current_date() - INTERVAL 30 DAYS
),
index_status AS (
SELECT
ai.endpoint_name,
ai.index_name,
CASE WHEN qi.index_name IS NOT NULL THEN 1 ELSE 0 END AS is_queried
FROM active_indexes ai
LEFT JOIN queried_indexes qi ON ai.index_name = qi.index_name
)
SELECT
endpoint_name,
COUNT(*) AS total_indexes,
SUM(is_queried) AS queried_indexes,
COUNT(*) - SUM(is_queried) AS unqueried_indexes
FROM index_status
GROUP BY endpoint_name
HAVING SUM(is_queried) = 0 -- Only fully unused endpoints
ORDER BY total_indexes DESC
Trovare indici inutilizzati all'interno degli endpoint attivi
Anche se un endpoint gestisce attivamente le query per alcuni indici, potrebbe avere altri indici che non ricevono traffico. Questi indici inutilizzati usano ancora risorse nell'endpoint. La rimozione di indici inutilizzati da un endpoint attivo può ridurre il footprint di memoria e impedirne l'aumento inutilmente.
La query seguente identifica singoli indici inutilizzati, inclusi quelli negli endpoint con altri indici attivi.
WITH created_indexes AS (
SELECT DISTINCT
request_params['name'] AS index_name,
request_params['endpoint_name'] AS endpoint_name
FROM system.access.audit
WHERE service_name = 'vectorSearch'
AND action_name = 'createVectorIndex'
AND event_date >= current_date() - INTERVAL 365 DAYS
),
deleted_indexes AS (
SELECT DISTINCT
request_params['name'] AS index_name
FROM system.access.audit
WHERE service_name = 'vectorSearch'
AND action_name = 'deleteVectorIndex'
AND event_date >= current_date() - INTERVAL 365 DAYS
),
active_indexes AS (
SELECT ci.index_name, ci.endpoint_name
FROM created_indexes ci
LEFT JOIN deleted_indexes di ON ci.index_name = di.index_name
WHERE di.index_name IS NULL
),
queried_indexes AS (
SELECT DISTINCT
request_params['name'] AS index_name
FROM system.access.audit
WHERE service_name = 'vectorSearch'
AND action_name IN (
'queryVectorIndex',
'queryVectorIndexNextPage',
'scanVectorIndex'
)
AND event_date >= current_date() - INTERVAL 30 DAYS
)
SELECT
ai.endpoint_name,
ai.index_name
FROM active_indexes ai
LEFT JOIN queried_indexes qi ON ai.index_name = qi.index_name
WHERE qi.index_name IS NULL
ORDER BY ai.endpoint_name, ai.index_name
Ottenere i dettagli dell'attività di query per indice
Per comprendere i modelli di query in tutti gli indici, non solo quelli inutilizzati, usare la query seguente. Questa query trova l'ora dell'ultima query e il volume di query per ogni indice, consentendo di identificare gli indici sottoposti a query, ma che vedono traffico molto basso e potrebbero anche essere candidati per la pulizia.
SELECT
request_params['name'] AS index_name,
MAX(event_time) AS last_query_time,
DATEDIFF(current_date(), DATE(MAX(event_time))) AS days_since_last_query,
COUNT(*) AS query_count_30d,
COUNT(DISTINCT DATE(event_time)) AS active_days_30d
FROM system.access.audit
WHERE service_name = 'vectorSearch'
AND action_name IN (
'queryVectorIndex',
'queryVectorIndexNextPage',
'scanVectorIndex'
)
AND event_date >= current_date() - INTERVAL 30 DAYS
GROUP BY 1
ORDER BY last_query_time ASC
Identificare chi ha creato gli endpoint inutilizzati
Per trovare chi ha creato gli endpoint che servono indici inutilizzati, utilizzare la query seguente. In questo modo è possibile contattare il team giusto per la pulizia.
SELECT
request_params['name'] AS endpoint_name,
user_identity.email AS created_by,
event_time AS created_at
FROM system.access.audit
WHERE service_name = 'vectorSearch'
AND action_name = 'createEndpoint'
AND event_date >= current_date() - INTERVAL 365 DAYS
ORDER BY event_time DESC
Personalizzare la finestra di lookback
Gli esempi precedenti usano una finestra di 30 giorni per definire "inutilizzato". Modificare il valore in base al INTERVAL caso d'uso:
- 30 giorni: impostazione predefinita ottimale per la maggior parte dei carichi di lavoro.
- 7 giorni: utilizzare per i carichi di lavoro per cui devono essere eseguite query giornaliere.
- 90 giorni: usare per carichi di lavoro batch o stagionali che vengono eseguiti meno frequentemente.
Sostituire INTERVAL 30 DAYS nella queried_indexes CTE con la finestra preferita.
Passaggi successivi
- Pianifica queste query come attività ricorrente usando Processi Lakeflow per ottenere rapporti regolari.
- Per altre strategie di ottimizzazione dei costi, vedere la Guida alla gestione dei costi di ricerca vettoriale .
- Configurare le politiche di budget per monitorare i costi di ricerca vettoriale. Vedere Criteri di budget per la ricerca vettoriale.