Mantén los índices vectoriales

En esta página, se describen las opciones para mantener tus índices de vectores. El mantenimiento de los índices ayuda a garantizar que estos se adapten a los cambios de datos que podrían afectar la exactitud 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.

Consulta las métricas del índice vectorial

Si tu tabla es propensa a actualizaciones o inserciones frecuentes, te recomendamos que reindexes 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 o mutaciones de vectores desde que se creó 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.

Cómo mantener los índices automáticamente

Puedes usar la marca de base de datos de configuración unificada general (GUC) scann.enable_index_maintenance junto con el parámetro auto_maintenance a nivel del índice cuando creas un índice de ScaNN. El uso de esta configuración en conjunto permite que AlloyDB administre el índice de forma incremental y divida grandes particiones de valores atípicos a medida que crece tu conjunto de datos. Cuando se dividen las particiones, AlloyDB intenta proporcionar mejores consultas por segundo (QPS) y resultados de la búsqueda.

Las actualizaciones de índices de mantenimiento automático persisten hasta que AlloyDB vuelve a actualizar el índice.

Para permitir que AlloyDB mantenga un índice automáticamente, agrega la extensión alloydb_scann al parámetro shared_preload_libraries, habilita la marca de base de datos scann.enable_index_maintenance y, luego, reinicia la base de datos para cargar la extensión alloydb_scann:

  1. Carga la extensión alloydb_scann en la lista shared_preload_libraries:

    sudo sed -r -i "s|(shared_preload_libraries\s*=\s*)'(.*)'.*$|\1'\2,alloydb_scann'|" DATA_DIR/postgresql.conf
  2. Verifica que la configuración del parámetro esté establecida correctamente:

    grep -iE 'shared_preload_libraries' DATA_DIR/postgresql.conf
  3. Para habilitar la marca scann.enable_index_maintenance, configúrala en el archivo postgresql.conf:

    scann.enable_index_maintenance = ON
  4. Reinicia AlloyDB Omni para que se aplique el cambio de parámetro:

    Docker

     docker container restart CONTAINER_NAME

    Reemplaza CONTAINER_NAME por el nombre que asignaste al contenedor de AlloyDB Omni cuando lo iniciaste.

    Podman

     podman container restart CONTAINER_NAME

    Reemplaza CONTAINER_NAME por el nombre que asignaste al contenedor de AlloyDB Omni cuando lo iniciaste.

Después de habilitar la marca scann.enable_index_maintenance, puedes habilitar el mantenimiento automático de los índices o habilitar la función scann_index_maintenance para invocar el mantenimiento de forma manual.

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

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

CREATE INDEX INDEX_NAME ON TABLE
  USING scann (EMBEDDING_COLUMN DISTANCE_FUNCTION)
  WITH (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 tu 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 punto: dot_product

    • Distancia de coseno: cosine

  • NUM_LEAVES_VALUE: Es la cantidad de particiones que se aplicarán a este índice. Se establece 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 ScaNN.

Administra las hojas para buscar particiones divididas automáticamente

Si habilitaste el mantenimiento automático de índices, AlloyDB divida automáticamente las particiones cuando se alcance el umbral de num_leaves. A medida que la cantidad de particiones aumenta debido a estas divisiones, debes ajustar la cantidad de hojas que se buscan para mantener un rendimiento óptimo.

Para administrar la cantidad de hojas que se buscarán automáticamente, usa pct_leaves_to_search. Este parámetro te permite especificar un porcentaje de la cantidad de particiones que se deben buscar. 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 el mantenimiento de forma manual

Si deseas invocar el mantenimiento de un índice en particular a pedido, ejecuta el siguiente comando:

SELECT scann_index_maintenance('INDEX_NAME');

Vuelve a compilar tu índice de forma manual

Puedes volver a compilar el índice de forma manual si quieres volver a compilarlo con la configuración 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 volver a compilar, por ejemplo, my-scann-index. Los nombres de los índices se comparten en tu 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 cómo volver a indexar en PostgreSQL, consulta REINDEX.

¿Qué sigue?