Best practice per l'ottimizzazione degli indici ScaNN

Seleziona una versione della documentazione:

Questa pagina fornisce consigli su come ottimizzare i parametri dell'indice AlloyDB Omni per un equilibrio ottimale tra richiamo e QPS. I parametri consigliati per l'indice Scalable Nearest Neighbor (ScaNN) variano a seconda che tu scelga di creare un indice ad albero a due o tre livelli.

Creazione dell'indice ScaNN

Per saperne di più, consulta la documentazione di riferimento dell'indice ScaNN.

Indice ad albero a due livelli

Per applicare i consigli che ti aiutano a trovare i valori ottimali di num_leaves e num_leaves_to_search per il tuo set di dati, segui questi passaggi consigliati:

  1. Per creare l'indice ScaNN ottimizzato per i seguenti casi, imposta il parametro num_leaves sul seguente valore, dove rows è il numero di righe nella tabella indicizzata:
    • Tempo di compilazione e qualità dell'indice bilanciati imposta num_leaves su sqrt(rows).
    • Qualità imposta num_leaves su rows/100.
  2. Esegui le query di test, aumentando il valore di scann.num_of_leaves_to_search, finché non raggiungi l'intervallo di richiamo target, ad esempio il 95%. Per saperne di più sull'analisi delle query, consulta Analizzare le query.
  3. Prendi nota del rapporto tra scann.num_leaves_to_search e num_leaves che verrà utilizzato nei passaggi successivi. Questo rapporto fornisce un'approssimazione del set di dati che ti aiuterà a raggiungere il richiamo target.

    Se utilizzi vettori ad alta dimensione (500 dimensioni o più) e vuoi migliorare il richiamo, prova a ottimizzare il valore di scann.pre_reordering_num_neighbors. Il valore predefinito è impostato sul valore 500 * K, dove K è il limite impostato nella query.
  4. Se il QPS è troppo basso dopo che le query raggiungono un richiamo target, segui questi passaggi:
    1. Ricrea l'indice, aumentando il valore di num_leaves e scann.num_leaves_to_search in base alle seguenti indicazioni:
      • Imposta num_leaves su un fattore maggiore della radice quadrata del conteggio delle righe. Ad esempio, se l'indice ha num_leaves impostato sulla radice quadrata del conteggio delle righe, prova a impostarlo sul doppio della radice quadrata. Se il valore è già il doppio, prova a impostarlo sul triplo della radice quadrata.
      • Aumenta scann.num_leaves_to_search in base alle esigenze per mantenere il rapporto con num_leaves, che hai annotato nel passaggio 3.
      • Imposta num_leaves su un valore minore o uguale al conteggio delle righe diviso per 100.
    2. Esegui di nuovo le query di test. Durante l'esecuzione delle query di test, prova a ridurre scann.num_leaves_to_search, trovando un valore che aumenti il QPS mantenendo un richiamo elevato. Prova diversi valori di scann.num_leaves_to_search senza ricreare l'indice.
  5. Ripeti il passaggio 4 finché il QPS e l'intervallo di richiamo non raggiungono valori accettabili.

Indice ad albero a tre livelli

Oltre ai consigli per l'indice ScaNN ad albero a due livelli, utilizza le seguenti indicazioni.

Per applicare i consigli per trovare il valore ottimale dei parametri dell'indice num_leaves e max_num_levels:

  1. Crea l'indice ScaNN con le seguenti combinazioni di num_leaves e max_num_levels in base ai tuoi obiettivi di rendimento:

    • Bilancia il tempo di compilazione e la qualità dell'indice: imposta max_num_levels su 2 e num_leaves su power(rows, ⅔).
    • Ottimizza per la qualità: imposta max_num_levels su 2 e num_leaves su rows/100.
  2. Esegui le query di test. Per saperne di più sull'analisi delle query, consulta Analizzare le query.

  3. Prendi nota del rapporto tra scann.num_leaves_to_search e num_leaves che verrà utilizzato nei passaggi successivi. Questo rapporto fornisce un'approssimazione del set di dati che ti aiuterà a raggiungere il richiamo target.

Se utilizzi vettori ad alta dimensione (500 dimensioni o più) e vuoi migliorare il richiamo, prova a ottimizzare il valore di scann.pre_reordering_num_neighbors. Il valore predefinito è impostato sul valore 500 * K, dove K è il limite impostato nella query.

  1. Se il QPS è troppo basso dopo che le query raggiungono un richiamo target, segui questi passaggi:

    • Ricrea l'indice, aumentando il valore di num_leaves e scann.num_leaves_to_search in base alle seguenti indicazioni:
    • Imposta num_leaves su un fattore maggiore di power(rows, ⅔). Ad esempio, se l'indice ha num_leaves impostato su power(rows, ⅔), prova a impostarlo sul doppio di power(rows, ⅔). Se il valore è già il doppio, prova a impostarlo sul triplo di power(rows, ⅔).
    • Aumenta scann.num_leaves_to_search in base alle esigenze per mantenere il rapporto con num_leaves, che hai annotato nel passaggio 3.
    • Imposta num_leaves su un valore minore o uguale a rows/100.
    • Esegui di nuovo le query di test. Durante l'esecuzione delle query di test, prova a ridurre scann.num_leaves_to_search, trovando un valore che aumenti il QPS mantenendo un richiamo elevato. Prova diversi valori di scann.num_leaves_to_search senza ricreare l'indice.
  2. Ripeti il passaggio 4 finché il QPS e l'intervallo di richiamo non raggiungono valori accettabili.

Manutenzione indici

Se la tua tabella è soggetta a aggiornamenti o inserimenti frequenti, ti consigliamo di reindicizzare periodicamente l'indice ScaNN esistente per migliorare l'accuratezza del richiamo. Puoi monitorare le metriche dell'indice per visualizzare le modifiche nelle distribuzioni dei vettori o le mutazioni dei vettori dalla creazione dell'indice e poi reindicizzare di conseguenza. Per saperne di più sulle metriche, consulta Metriche dell'indice vettoriale.

Passaggi successivi