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). Los parámetros y valores recomendados cambian según la cantidad de niveles que tenga tu índice.
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, ten en cuenta el siguiente límite:
num_leavesse limita a 30 millones.
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 vista previa, elige uno de los siguientes dos métodos:
Habilita la marca de base de datos
scann.enable_preview_features.Para obtener más información sobre cómo configurar marcas de bases de datos, consulta Configura marcas de bases de datos.
Establece la marca de base de datos
scann.max_allowed_num_levelsa nivel de la sesión en3.SET scann.max_allowed_num_levels = 3;
Í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:
- Para crear el índice
ScaNNoptimizado para los siguientes casos, establece el parámetronum_leavesen el siguiente valor, donde rows es la cantidad de filas de la tabla indexada:- Tiempo y calidad de compilación del índice equilibrados: Establece
num_leavesensqrt(rows). - calidad establece num_leaves en filas/100.
- Tiempo y calidad de compilación del índice equilibrados: Establece
- Ejecuta tus consultas de prueba y aumenta el valor de
scann.num_of_leaves_to_searchhasta que alcances el rango de recuperación objetivo, por ejemplo, el 95%. Para obtener más información sobre el análisis de tus búsquedas, consulta Analiza tus búsquedas. - Toma nota de la proporción entre
scann.num_leaves_to_searchynum_leavesque 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 descann.pre_reordering_num_neighbors. El valor predeterminado se establece en el valor50 * K, dondeKes el límite que estableces en tu búsqueda. - Si tu QPS es demasiado bajo después de que tus búsquedas alcanzan un nivel de recuperación objetivo, sigue estos pasos:
- Vuelve a crear el índice y aumenta los valores de
num_leavesyscann.num_leaves_to_searchsegún las siguientes instrucciones:- Establece
num_leavesen un factor mayor de la raíz cuadrada del recuento de filas. Por ejemplo, si el índice tienenum_leavesestablecido 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_searchsegún sea necesario para mantener su proporción connum_leaves, que anotaste en el paso 3. - Establece
num_leavesen un valor menor o igual que el recuento de filas dividido por 100.
- Establece
- Vuelve a ejecutar las consultas de prueba.
Mientras ejecutas las consultas de prueba, experimenta con la reducción de
scann.num_leaves_to_searchy busca un valor que aumente las QPS y mantenga una recuperación alta. Prueba con diferentes valores descann.num_leaves_to_searchsin volver a compilar el índice.
- Vuelve a crear el índice y aumenta los valores de
- Repite el paso 4 hasta que tanto el QPS como 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 la siguiente guía.
Para aplicar recomendaciones y encontrar el valor óptimo de los parámetros de índice num_leaves y max_num_levels, sigue estos pasos:
Crea el índice
ScaNNcon las siguientes combinaciones denum_leavesymax_num_levelssegún tus objetivos de rendimiento:- balance index build time & quality: Establece
max_num_levelscomo2ynum_leavescomopower(rows, ⅔). - Optimizar la calidad: Establece
max_num_levelscomo2ynum_leavescomorows/100.
- balance index build time & quality: Establece
Ejecuta tus consultas de prueba. Para obtener más información sobre el análisis de consultas, consulta Analiza tus búsquedas.
Toma nota de la proporción entre
scann.num_leaves_to_searchynum_leavesque 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, donde K es el límite que estableces en tu búsqueda.
Si tu QPS es demasiado bajo después de que tus búsquedas alcanzan un nivel de recuperación objetivo, sigue estos pasos:
- Vuelve a crear el índice y aumenta los valores de
num_leavesyscann.num_leaves_to_searchsegún las siguientes instrucciones: - Establece
num_leavesen un factor mayor depower(rows, ⅔). Por ejemplo, si el índice tienenum_leavesestablecido enpower(rows, ⅔), intenta establecerlo en el doble depower(rows, ⅔). Si el valor ya es doble, intenta establecerlo en el triple depower(rows, ⅔). - Aumenta
scann.num_leaves_to_searchsegún sea necesario para mantener su proporción connum_leaves, que anotaste en el paso 3. - Establece
num_leavesen un valor menor o igual querows/100. - Vuelve a ejecutar las consultas de prueba. Mientras ejecutas las consultas de prueba, experimenta con la reducción de
scann.num_leaves_to_searchy busca un valor que aumente las QPS y mantenga una recuperación alta. Prueba diferentes valores descann.num_leaves_to_searchsin volver a compilar el índice.
- Vuelve a crear el índice y aumenta los valores de
Repite el paso 4 hasta que tanto el QPS como 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 orientaciones para encontrar el valor óptimo para num_leaves y max_num_levels:
Crea un índice de ScaNN con las siguientes combinaciones de
num_leavesymax_num_levelssegún tus objetivos de rendimiento:Equilibra el tiempo de compilación y la calidad del índice: Establece
max_num_levelsen3ynum_leavesenpower(ROWS, 3/4).Optimiza la calidad: Establece
max_num_levelsen3ynum_leavesenROWS/100.
Ejecuta tus consultas de prueba. Para obtener más información sobre el análisis de consultas, consulta Analiza tus consultas.
Toma nota de la proporción entre
scann.num_leaves_to_searchynum_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.Si tu QPS es demasiado baja después de que tus búsquedas alcanzan un nivel de recuperación objetivo, vuelve a crear el índice y aumenta los valores de
num_leavesyscann.num_leaves_to_searchsegún las siguientes instrucciones:Establece
num_leavesen un factor mayor depower(ROWS, 3/4). Por ejemplo, si el índice tienenum_leavesestablecido enpower(ROWS, 3/4), intenta establecerlo en el doble. Si el valor ya es doble, intenta establecerlo como triple.Aumenta
scann.num_leaves_to_searchsegún sea necesario para mantener su proporción connum_leaves, que anotaste en el paso tres.Establece
num_leavesen un valor menor o igual queROWS/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. Busca un valor que aumente las QPS y mantenga un nivel de recuperación alto. Prueba con diferentes valores descann.num_leaves_to_searchsin volver a compilar el índice.
Repite el paso cuatro hasta que el rango de recuperación y las QPS alcancen valores aceptables.
Mejora la recuperación de las búsquedas filtradas
Cuando realices una búsqueda de vectores de k-vecino más cercano (KNN) que incluya un filtro, es posible que te encuentres con situaciones en las que la consulta devuelva 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 muy selectivos. Esto sucede porque las particiones iniciales, o nodos hoja, que busca ScaNN no contienen suficientes vectores que satisfagan las condiciones del filtro.
Para abordar este problema, AlloyDB 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 función de transmisión si configuras el parámetro scann.satisfy_limit en relaxed_order. Cuando se habilita, el análisis de vectores continúa buscando en particiones de hojas adicionales hasta que encuentra suficientes resultados para satisfacer el LIMIT de tu búsqueda, 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 búsqueda. 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 búsquedas devuelven menos resultados de lo 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 la búsqueda.
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 del í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 Cómo ver las métricas del índice vectorial.