Mantener índices vectoriales

Selecciona una versión de la documentación:

Para asegurarte de que tus índices de vectores se adapten a los cambios que podrían afectar la precisión de los resultados de la búsqueda, mantén tus índices de vectores.

Antes de comenzar

Antes de administrar el mantenimiento del índice, instala o actualiza las extensiones vector y alloydb_scann:

  • Si no están instaladas las extensiones vector y alloydb_scann, instálalas.

    CREATE EXTENSION IF NOT EXISTS vector;
    CREATE EXTENSION IF NOT EXISTS alloydb_scann;
    
  • Si las extensiones vector y alloydb_scann ya están instaladas, actualízalas.

    ALTER EXTENSION vector UPDATE;
    ALTER EXTENSION alloydb_scann UPDATE;
    

Mantener los índices automáticamente

Puedes permitir que AlloyDB Omni administre automáticamente tus índices vectoriales. A medida que crece tu conjunto de datos, AlloyDB Omni analiza y actualiza los centroides, y divide las particiones grandes de valores atípicos. 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 Omni habilita el mantenimiento automático de índices de forma predeterminada para los índices 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 del índice.

Habilita el mantenimiento automático durante la creación del índice

Para habilitar el mantenimiento automático durante la creación del índice, configura el parámetro auto_maintenance como 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: Columna que almacena los datos vector que 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: l2

    • Producto escalar: dot_product

    • Distancia 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 Omni administra y ajusta automáticamente la estructura del índice. El valor predeterminado de auto_maintenance, cuando mode se establece en AUTO, es on.

    • MANUAL: Administra y ajusta manualmente tu índice de ScaNN. El valor predeterminado de auto_maintenance, cuando mode se establece en MANUAL, es off.

    Para obtener más información sobre qué modo de índice usar, consulta Crea un índice de ScaNN.

  • NUM_PARTITIONS: Cantidad de particiones que se aplicarán a este índice. Establece este parámetro en cualquier valor entre 3 y 1048576. Para obtener más información sobre cómo decidir este valor, consulta Cómo ajustar un índice de ScaNN.

Configura el mantenimiento automático para los índices existentes

Para configurar el mantenimiento automático de 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 en on. Para inhabilitar la propiedad, establece el valor en off.

Aumentar la capacidad de procesamiento del mantenimiento automático

Para aumentar la capacidad de procesamiento del mantenimiento automático, configura la marca de base de datos scann.max_background_workers. Aumentar la cantidad de trabajadores en segundo plano incrementa 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 valor max_worker_processes establecido para tu clúster de base de datos.

Para obtener más información sobre cómo configurar marcas de bases de datos, consulta Configura parámetros de bases de datos.

Aumenta la demora del mantenimiento automático

Para aumentar la demora entre las ejecuciones de mantenimiento automáticas, configura la marca de base de datos scann.maintenance_background_naptime_s.

Para obtener más información sobre cómo configurar marcas de bases de datos, consulta Configura parámetros de bases de datos.

Porcentaje de búsqueda de particiones

A medida que aumenta la cantidad de particiones debido a que AlloyDB Omni divide automáticamente las particiones grandes atípicas, te recomendamos que ajustes la cantidad de hojas que buscas para mantener un rendimiento óptimo. Para administrar este número automáticamente, configura el parámetro scann.pct_leaves_to_search.

scann.pct_leaves_to_search representa el porcentaje de particiones actuales en las que se realizará la búsqueda. 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 Omni se establece de forma predeterminada en 1% de hojas.

Si esperas que tu conjunto de datos crezca de forma significativa, establece el valor inicial en 1.

Para configurar 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: Porcentaje de particiones que se buscarán.

Cómo invocar manualmente el mantenimiento de índices

Si deseas invocar el mantenimiento en 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 de 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 del índice. 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 existente ajustado automáticamente, consulta Cómo configurar el mantenimiento automático para índices existentes.

Cómo volver 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 de vectores o las mutaciones desde que se compiló tu índice, consulta Cómo ver las métricas del índice de vectores.

Para volver a compilar manualmente tu índice 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?