Para garantizar que tus índices de vectores se adapten a los cambios que podrían afectar la precisión de los resultados de la búsqueda, realiza el mantenimiento de tus índices de vectores.
Antes de comenzar
Antes de administrar el mantenimiento de índices, instala o actualiza las extensiones vector y alloydb_scann:
Si no están instaladas las extensiones
vectoryalloydb_scann, instálalas.CREATE EXTENSION IF NOT EXISTS vector; CREATE EXTENSION IF NOT EXISTS alloydb_scann;Si ya están instaladas las extensiones
vectoryalloydb_scann, actualízalas.ALTER EXTENSION vector UPDATE; ALTER EXTENSION alloydb_scann UPDATE;
Realiza el mantenimiento de los índices automáticamente
Puedes permitir que AlloyDB administre automáticamente tus índices de vectores. A medida que crece tu conjunto de datos, AlloyDB analiza y actualiza los centroides, y divide las particiones atípicas grandes. Esto mejora automáticamente las consultas por segundo (QPS) y la calidad de los resultados de la búsqueda. Las actualizaciones automáticas son permanentes hasta la próxima ejecución de mantenimiento.
AlloyDB habilita el mantenimiento automático de índices de forma predeterminada para los índices de ScaNN ajustados automáticamente. Si deseas crear índices de ScaNN ajustados automáticamente, pero inhabilitar el mantenimiento automático, consulta Inhabilita el mantenimiento automático para los índices automáticos.
Para habilitar el mantenimiento automático de los índices creados de forma manual, consulta Habilita el mantenimiento automático durante la creación de índices.
Habilita el mantenimiento automático durante la creación de índices
Para habilitar el mantenimiento automático durante la creación de índices, establece el parámetro auto_maintenance en on. Por ejemplo, consulta el siguiente comando que crea un índice de vectores de ScaNN.
CREATE INDEX INDEX_NAME ON TABLE_NAME \
USING scann (EMBEDDING_COLUMN_NAME DISTANCE_FUNCTION_NAME) \
WITH (mode='INDEX_MODE', num_leaves=NUM_PARTITIONS, auto_maintenance=on);
Reemplaza las siguientes variables:
INDEX_NAME: Es el nombre del índice que deseas crear. Por ejemplo,my_scann_index. Los nombres de los índices se comparten en toda la base de datos. Asegúrate de que cada nombre de índice sea único para cada tabla de tu base de datos.TABLE_NAME: Es la tabla a la que deseas agregar el índice.EMBEDDING_COLUMN_NAME: Es la columna que almacena los datosvectorque deseas indexar.DISTANCE_FUNCTION_NAME: Es la función de distancia que se usará con este índice. Elige una de estas opciones:Distancia de L2:
l2Producto punto:
dot_productDistancia de coseno:
cosine
INDEX_MODE: Es el modo en el que se creará el índice de ScaNN. Los valores disponibles son los siguientes:AUTO: AlloyDB administra y ajusta automáticamente la estructura del índice. El valorauto_maintenancepredeterminado, cuandomodese establece enAUTO, eson.MANUAL: Administra y ajusta manualmente tu índice de ScaNN. El valorauto_maintenancepredeterminado, cuandomodese establece enMANUAL, esoff.
Para obtener más información sobre qué modo de índice usar, consulta Crea un índice de ScaNN.
NUM_PARTITIONS: Es la cantidad de particiones que se aplicarán a este índice. Establece este valor en cualquier valor entre3y1048576. Para obtener más información sobre cómo decidir este valor, consulta Ajusta un índice deScaNN.
Configura el mantenimiento automático para los índices existentes
Para configurar el mantenimiento automático para los índices manuales existentes, ejecuta el siguiente comando:
ALTER INDEX INDEX_NAME SET (auto_maintenance = AUTOMATIC_MAINTENANCE);
Reemplaza las siguientes variables:
INDEX_NAME: Es el nombre del índice que deseas modificar. Por ejemplo,my_scann_index.AUTOMATIC_MAINTENANCE: Habilita o inhabilita el mantenimiento automático. Para habilitar, establece el valor enon. Para inhabilitar, establece el valor enoff.
Aumenta el rendimiento del mantenimiento automático
Para aumentar la capacidad de procesamiento del mantenimiento automático, configura la
scann.max_background_workers
marca de base de datos. Si aumentas la cantidad de trabajadores en segundo plano, aumenta la cantidad de índices procesados por unidad de tiempo. No reduce el tiempo de procesamiento de los índices individuales. Este valor debe ser menor que el
max_worker_processes
valor establecido para tu clúster de base de datos.
Para obtener más información sobre la configuración de marcas de bases de datos, consulta Configura las marcas de base de datos de una instancia.
Aumenta el retraso del mantenimiento automático
Para aumentar el retraso entre las ejecuciones de mantenimiento automático, configura la
scann.maintenance_background_naptime_s
marca de base de datos.
Para obtener más información sobre la configuración de marcas de bases de datos, consulta Configura las marcas de base de datos de una instancia.
Porcentaje de búsqueda de particiones
A medida que aumenta la cantidad de particiones debido a que AlloyDB divide automáticamente las particiones atípicas grandes, te recomendamos que ajustes la cantidad de hojas que buscas para mantener un rendimiento óptimo. Para administrar esta cantidad automáticamente, configura el parámetro scann.pct_leaves_to_search.
scann.pct_leaves_to_search representa el porcentaje de particiones actuales que se buscarán. Puedes establecer este parámetro en cualquier valor entre 0 y 100. El
valor predeterminado es 0, que inhabilita este parámetro y, en su lugar, usa el valor establecido en
scann.num_leaves_to_search. Si scann.num_leaves_to_search también se establece en 0, AlloyDB usa de forma predeterminada el 1% de las hojas.
Si esperas que tu conjunto de datos crezca de manera significativa, establece el valor inicial en 1.
Para establecer scann.pct_leaves_to_search, ejecuta el siguiente comando:
ALTER DATABASE DB_NAME SET scann.pct_leaves_to_search = PERCENTAGE_PARTITIONS_TO_SEARCH;
Reemplaza las siguientes variables:
DB_NAME: Es el nombre de tu base de datos.PERCENTAGE_PARTITIONS_TO_SEARCH: Es el porcentaje de particiones que se buscarán.
Invoca el mantenimiento de índices de forma manual
Si deseas invocar el mantenimiento de un índice en particular de forma manual, ejecuta el siguiente comando:
SELECT scann_index_maintenance('INDEX_NAME');
Reemplaza INDEX_NAME por el nombre del índice en el que deseas invocar el mantenimiento. Por ejemplo, my_scann_index.
Inhabilita el mantenimiento automático para los índices automáticos
Para inhabilitar el mantenimiento automático de los índices de ScaNN ajustados automáticamente, establece el parámetro auto_maintenance en OFF durante la creación de índices. Por ejemplo, consulta el siguiente comando que crea un índice de ScaNN ajustado automáticamente:
CREATE INDEX similarity_index ON products
USING scann (description_embedding cosine)
WITH (MODE = 'AUTOMATIC', auto_maintenance = 'OFF');
Si deseas inhabilitar el mantenimiento automático en un índice de ScaNN ajustado automáticamente existente, consulta Configura el mantenimiento automático para los índices existentes.
Vuelve a compilar tu índice de forma manual
Si tu tabla es propensa a actualizaciones o inserciones frecuentes, te recomendamos que vuelvas a compilar periódicamente tu índice de ScaNN para mejorar su precisión de recuperación. Para obtener más información sobre cómo ver los cambios en las distribuciones o mutaciones de vectores desde que se compiló tu índice, consulta Visualiza las métricas del índice de vectores.
Para volver a compilar tu índice de forma manual con sus configuraciones originales, ejecuta el siguiente comando:
REINDEX INDEX CONCURRENTLY INDEX_NAME;
Reemplaza INDEX_NAME por el nombre del índice que deseas volver a compilar. Por ejemplo, my_scann_index.
Para obtener más información sobre la reindexación en PostgreSQL, consulta REINDEX.
¿Qué sigue?
- Crea un índice de ScaNN
- Métricas del índice de vectores
- Optimiza el rendimiento de las consultas vectoriales para ScaNN