Mantén los índices vectoriales

En esta página, se describen las opciones para mantener los índices vectoriales. El mantenimiento de los índices ayuda a garantizar que se adapten a los cambios en los datos que podrían afectar la precisión de los resultados de la búsqueda. Usa las estrategias de esta página para evitar la degradación del rendimiento de las consultas a medida que crece tu conjunto de datos.

Antes de comenzar

  • Instala o actualiza las extensiones vector y alloydb_scann.

    1. Si no están instaladas las extensiones vector y alloydb_scann, instala las versiones más recientes de las extensiones.

      CREATE EXTENSION IF NOT EXISTS vector;
      CREATE EXTENSION IF NOT EXISTS alloydb_scann;
      
    2. Si las extensiones vector y alloydb_scann ya están instaladas, actualízalas a la versión más reciente.

      ALTER EXTENSION vector UPDATE;
      ALTER EXTENSION alloydb_scann UPDATE;
      

Cómo ver las métricas del índice de vectores

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 recuperación de tu índice. 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.

Mantener índices automáticamente

La función de mantenimiento automático de índices permite que AlloyDB administre el índice de forma incremental para que, a medida que crezca tu conjunto de datos, AlloyDB analice y actualice continuamente los centroides, y divida las particiones grandes de valores atípicos. Esto ayuda a mantener el índice para las consultas por segundo (QPS) comparables y la calidad de los resultados de la búsqueda. Las actualizaciones que se realizan durante el mantenimiento automático son permanentes hasta que se ejecute un mantenimiento posterior.

Puedes usar la marca de base de datos scann.enable_preview_features (GUC) junto con el parámetro auto_maintenance a nivel del índice cuando creas un índice de ScaNN para habilitar el mantenimiento automático de los índices de ScaNN.

La función de mantenimiento automático de índices está habilitada de forma predeterminada para los índices de ScaNN ajustados automáticamente. En el caso de los índices creados manualmente, después de habilitar la marca scann.enable_preview_features, puedes establecer el parámetro auto_maintenance durante la creación del índice o usar la función scann_index_maintenance para activar el mantenimiento automático del índice a pedido.

Para permitir que AlloyDB mantenga un índice automáticamente, habilita la marca scann.enable_preview_features:

gcloud alloydb instances update INSTANCE_ID \
     --database-flags scann.enable_preview_features=on \
     --region=REGION_ID \
     --cluster=CLUSTER_ID \
     --project=PROJECT_ID

Reemplaza lo siguiente:

  • INSTANCE_ID: El ID de la instancia.
  • REGION_ID: Es la región en la que se coloca la instancia, por ejemplo, us-central1.
  • CLUSTER_ID: Es el ID del clúster en el que se coloca la instancia.
  • PROJECT_ID: Es el ID del proyecto en el que se coloca el clúster.

Las actualizaciones que se realicen en el índice como resultado del mantenimiento automático son permanentes hasta que AlloyDB vuelva a actualizar el índice.

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

Para crear un índice de ScaNN manual con el mantenimiento automático del índice habilitado, ejecuta el siguiente comando de ejemplo:

CREATE INDEX INDEX_NAME ON TABLE \
USING scann (EMBEDDING_COLUMN DISTANCE_FUNCTION) \
WITH (mode=MANUAL, num_leaves=NUM_LEAVES_VALUE, auto_maintenance=on);

Reemplaza lo siguiente:

  • INDEX_NAME: 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: Es la tabla a la que se agregará el índice.

  • EMBEDDING_COLUMN: Es una columna que almacena datos vector.

  • DISTANCE_FUNCTION: 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

  • NUM_LEAVES_VALUE: Es la cantidad de particiones que se aplicarán a este índice. Se puede establecer en cualquier valor entre 1 y 1048576. Para obtener más información sobre cómo decidir este valor, consulta Cómo ajustar un índice de ScaNN.

Puedes aumentar el rendimiento del mantenimiento automático del índice en varios índices configurando la marca de base de datos scann.max_background_workers. Aumentar la cantidad de trabajadores incrementa la cantidad de índices procesados en una unidad de tiempo, pero no reduce el tiempo de procesamiento de un solo índice. De manera opcional, también puedes establecer la marca de base de datos scann.maintenance_background_naptime_s para controlar la demora mínima entre las ejecuciones de mantenimiento automático del índice.

Configura pct_leaves_to_search para el mantenimiento automático del índice

Si habilitaste el mantenimiento automático de índices, AlloyDB divide automáticamente las particiones según la heurística; por ejemplo, divide las particiones grandes atípicas que superan un tamaño determinado. A medida que aumenta la cantidad de particiones debido a estas divisiones, debes ajustar la cantidad de hojas que se buscarán para mantener un rendimiento óptimo.

Para administrar la cantidad de hojas que se deben buscar automáticamente, usa pct_leaves_to_search. Este parámetro te permite especificar un porcentaje de la cantidad de particiones que se buscarán. Si esperas que tu conjunto de datos crezca de forma significativa, comienza por establecer el valor de pct_leaves_to_search en 1. El parámetro está inhabilitado de forma predeterminada.

Establece este valor en el porcentaje de la cantidad actual de particiones. Por ejemplo, para buscar el 1% de la cantidad actual de particiones, establece este valor en 1.

Puedes establecer este parámetro en cualquier valor entre 0 y 100. El valor predeterminado es 0, que inhabilita este parámetro y usa scann.num_leaves_to_search para calcular la cantidad de hojas que se deben buscar.

Para establecer la marca pct_leaves_to_search en tu base de datos, ejecuta el siguiente comando:

ALTER DATABASE DATABASE_NAME SET scann.pct_leaves_to_search = PERCENTAGE_LEAVES_TO_SEARCH;

Reemplaza lo siguiente:

  • DATABASE_NAME: Es el nombre de la base de datos.
  • PERCENTAGE_LEAVES_TO_SEARCH: Es el porcentaje de num_leaves que se buscará.

Cómo invocar manualmente el mantenimiento de índices

Si deseas invocar el mantenimiento de un índice en particular a pedido, ejecuta el siguiente comando. Esta función está disponible en la versión alloydb_scann 0.1.2 o posterior.

Para usar esta función, primero debes habilitar la marca scann.enable_preview_features como se describe en Cómo mantener los índices automáticamente.

SELECT scann_index_maintenance('INDEX_NAME');

Vuelve a compilar tu índice de forma manual

Puedes volver a compilar tu índice de forma manual si deseas hacerlo con las configuraciones que especificaste cuando se creó.

Para volver a compilar tu índice de forma manual, ejecuta el siguiente comando:

REINDEX INDEX CONCURRENTLY INDEX_NAME;

Reemplaza INDEX_NAME por el nombre del índice que deseas recompilar, 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.

Para obtener más información sobre la reindexación en PostgreSQL, consulta REINDEX.

¿Qué sigue?