Prácticas recomendadas para ajustar los índices de ScaNN

Selecciona una versión de la documentación:

Sigue las prácticas recomendadas para ajustar tus índices de ScaNN y lograr un equilibrio entre la recuperación de la búsqueda y las consultas por segundo (QPS). Según la cantidad de niveles que tenga tu índice, los parámetros y valores recomendados cambian.

Para obtener información sobre cómo crear índices de ScaNN, consulta Crea un índice de ScaNN.

Límites

Antes de comenzar a ajustar tus índices de ScaNN, reconoce el siguiente límite:

Antes de comenzar

Si deseas crear un índice de ScaNN de cuatro niveles, primero debes habilitar la función de versión preliminar para tu instancia de AlloyDB. Para habilitar la función de versión preliminar, elige uno de los siguientes dos métodos:

Índice de árbol de dos niveles

Para aplicar recomendaciones que te ayuden a encontrar los valores óptimos de num_leaves y num_leaves_to_search para tu conjunto de datos, sigue estos pasos recomendados:

  1. Para crear el índice ScaNN optimizado para los siguientes casos, establece el parámetro num_leaves en el siguiente valor, en el que filas es la cantidad de filas de la tabla indexada:
    • Tiempo de compilación y calidad del índice equilibrados establece num_leaves en sqrt(rows).
    • Calidad establece num_leaves en filas/100.
  2. Ejecuta tus consultas de prueba y aumenta el valor de scann.num_of_leaves_to_search hasta que alcances el rango de recuperación objetivo, por ejemplo, el 95%. Para obtener más información sobre el análisis de tus consultas, consulta Analiza tus consultas.
  3. Toma nota de la proporción entre scann.num_leaves_to_search y num_leaves que se usará en los pasos posteriores. Esta proporción proporciona una aproximación en torno al conjunto de datos que te ayudará a alcanzar la recuperación objetivo.

    Si trabajas con vectores de alta dimensión (500 dimensiones o más) y deseas mejorar la recuperación, intenta ajustar el valor de scann.pre_reordering_num_neighbors. El valor predeterminado se establece en el valor 50 * K, en el que K es el límite que estableces en tu consulta.
  4. Si tu QPS es demasiado baja después de que tus consultas alcanzan una recuperación objetivo, sigue estos pasos:
    1. Vuelve a crear el índice y aumenta el valor de num_leaves y scann.num_leaves_to_search según las siguientes instrucciones:
      • Establece num_leaves en un factor mayor de la raíz cuadrada del recuento de filas. Por ejemplo, si el índice tiene num_leaves establecido en la raíz cuadrada del recuento de filas, intenta establecerlo en el doble de la raíz cuadrada. Si el valor ya es doble, intenta establecerlo en el triple de la raíz cuadrada.
      • Aumenta scann.num_leaves_to_search según sea necesario para mantener su proporción con num_leaves, que anotaste en el paso 3.
      • Establece num_leaves en un valor menor o igual que el recuento de filas dividido por 100.
    2. Vuelve a ejecutar las consultas de prueba. Mientras ejecutas las consultas de prueba, experimenta con la reducción de scann.num_leaves_to_search y busca un valor que aumente la QPS y mantenga alta la recuperación. Prueba con diferentes valores de scann.num_leaves_to_search sin volver a compilar el índice.
  5. Repite el paso 4 hasta que la QPS y el rango de recuperación alcancen valores aceptables.

Índice de árbol de tres niveles

Además de las recomendaciones para el índice de árbol ScaNN de dos niveles, usa las siguientes instrucciones.

Para aplicar recomendaciones que te ayuden a encontrar el valor óptimo de los parámetros de índice num_leaves y max_num_levels, sigue estos pasos:

  1. Crea el índice ScaNN con las siguientes combinaciones de num_leaves y max_num_levels según tus objetivos de rendimiento:

    • Equilibra el tiempo de compilación y la calidad del índice: Establece max_num_levels como 2 y num_leaves como power(rows, ⅔).
    • Optimiza la calidad: Establece max_num_levels como 2 y num_leaves como rows/100.
  2. Ejecuta tus consultas de prueba. Para obtener más información sobre el análisis de consultas, consulta Analiza tus consultas.

  3. Toma nota de la proporción entre scann.num_leaves_to_search y num_leaves que se usará en los pasos posteriores. Esta proporción proporciona una aproximación en torno al conjunto de datos que te ayudará a alcanzar la recuperación objetivo.

Si trabajas con vectores de alta dimensión (500 dimensiones o más) y deseas mejorar la recuperación, intenta ajustar el valor de scann.pre_reordering_num_neighbors. El valor predeterminado se establece en el valor 50 * K, en el que K es el límite que estableces en tu consulta.

  1. Si tu QPS es demasiado baja después de que tus consultas alcanzan una recuperación objetivo, sigue estos pasos:

    • Vuelve a crear el índice y aumenta el valor de num_leaves y scann.num_leaves_to_search según las siguientes instrucciones:
    • Establece num_leaves en un factor mayor de power(rows, ⅔). Por ejemplo, si el índice tiene num_leaves establecido en power(rows, ⅔), intenta establecerlo en el doble de power(rows, ⅔). Si el valor ya es doble, intenta establecerlo en el triple de power(rows, ⅔).
    • Aumenta scann.num_leaves_to_search según sea necesario para mantener su proporción con num_leaves, que anotaste en el paso 3.
    • Establece num_leaves en un valor menor o igual que rows/100.
    • Vuelve a ejecutar las consultas de prueba. Mientras ejecutas las consultas de prueba, experimenta con la reducción de scann.num_leaves_to_search y busca un valor que aumente la QPS y mantenga alta la recuperación. Prueba con diferentes valores de scann.num_leaves_to_search sin volver a compilar el índice.
  2. Repite el paso 4 hasta que la QPS y el rango de recuperación alcancen valores aceptables.

Índice de árbol de cuatro niveles

Además de las recomendaciones para los índices de árbol de tres niveles, usa las siguientes instrucciones para encontrar el valor óptimo de num_leaves y max_num_levels:

  1. Crea un índice de ScaNN con las siguientes combinaciones de num_leaves y max_num_levels según tus objetivos de rendimiento:

    • Equilibra el tiempo de compilación y la calidad del índice: Establece max_num_levels en 3 y num_leaves como power(ROWS, 3/4).

    • Optimiza la calidad: Establece max_num_levels en 3 y num_leaves como ROWS/100.

  2. Ejecuta tus consultas de prueba. Para obtener más información sobre el análisis de consultas, consulta Analiza tus consultas.

  3. Toma nota de la proporción entre scann.num_leaves_to_search y num_leaves. Usarás esta proporción para alcanzar la recuperación objetivo en los pasos posteriores.

    Si trabajas con vectores de alta dimensión (500 dimensiones o más) y deseas mejorar la recuperación, intenta ajustar el valor de scann.pre_reordering_num_neighbors.

  4. Si tu QPS es demasiado baja después de que tus consultas alcanzan una recuperación objetivo, entonces vuelve a crear el índice, aumentando el valor de num_leaves y scann.num_leaves_to_search según las siguientes instrucciones:

    1. Establece num_leaves en un factor mayor de power(ROWS, 3/4). Por ejemplo, si el índice tiene num_leaves establecido en el power(ROWS, 3/4), intenta establecerlo en el doble. Si el valor ya es doble, intenta establecerlo en el triple.

    2. Aumenta scann.num_leaves_to_search según sea necesario para mantener su proporción con num_leaves, que anotaste en el paso 3.

    3. Establece num_leaves en un valor menor o igual que ROWS/100.

    4. Vuelve a ejecutar las consultas de prueba. Mientras ejecutas las consultas de prueba, experimenta con la reducción de scann.num_leaves_to_search. Busca un valor que aumente la QPS y mantenga alta la recuperación. Prueba con diferentes valores de scann.num_leaves_to_search sin volver a compilar el índice.

  5. Repite el paso 4 hasta que el rango de recuperación y la QPS alcancen valores aceptables.

Mejora la recuperación de las búsquedas filtradas

Cuando realizas una búsqueda vectorial de k-vecino más cercano (KNN) que incluye un filtro, es posible que te encuentres con situaciones en las que la consulta muestra menos resultados de los solicitados en la cláusula LIMIT. Esto puede generar lo que se conoce como recuperación insuficiente y es más probable que ocurra cuando se usan filtros altamente selectivos. Esto sucede porque las particiones iniciales, o hojas, que busca ScaNN no contienen suficientes vectores que cumplan con las condiciones del filtro.

Para solucionar este problema, AlloyDB Omni ofrece una función que permite que la búsqueda se expanda de forma dinámica más allá del conjunto inicial de hojas para encontrar suficientes resultados coincidentes.

Cómo funciona la transmisión

Puedes habilitar la funcionalidad de transmisión si estableces el parámetro scann.satisfy_limit en relaxed_order. Cuando está habilitado, el análisis vectorial continúa buscando en particiones de hojas adicionales hasta que encuentra suficientes resultados para satisfacer el LIMIT de tu consulta, lo que mejora la recuperación.

Para evitar que una búsqueda continúe durante demasiado tiempo y controlar el impacto en el rendimiento, puedes usar el parámetro scann.max_pct_leaves_to_search. Este parámetro de configuración actúa como una protección, ya que establece un límite superior en el porcentaje de hojas totales que puede visitar una consulta. El valor predeterminado es 15%.

Cuándo usar la transmisión

Considera usar la función de transmisión en los siguientes casos:

  • Usas filtros con tus búsquedas vectoriales.
  • Observas que tus consultas muestran menos resultados de los que esperas según tu cláusula LIMIT.

Si habilitas scann.satisfy_limit, puedes mejorar la recuperación de tus búsquedas filtradas. También se recomienda configurar scann.max_pct_leaves_to_search para lograr un equilibrio entre la recuperación y el rendimiento de las consultas.

Optimiza el rendimiento de las consultas filtradas

Para obtener un rendimiento óptimo en las consultas filtradas, recomendamos crear un índice de árbol B en las columnas filtradas. Esto permite que el planificador de consultas seleccione la estrategia de filtrado más eficiente y reduzca significativamente el tiempo de ejecución de la consulta.

Mantenimiento de índices

Si tu tabla es propensa a actualizaciones o inserciones frecuentes, te recomendamos que vuelvas a indexar periódicamente el índice ScaNN existente para mejorar la precisión de la recuperación. Puedes supervisar las métricas de índice para ver los cambios en las distribuciones de vectores o las mutaciones de vectores desde que se compiló el índice y, luego, volver a indexar según corresponda. Para obtener más información sobre las métricas, consulta Visualiza las métricas de los índices vectoriales.

¿Qué sigue?