Mantener índices de vectores

Selecciona una versión de la documentación:

En esta página se describen las opciones para mantener tus índices vectoriales. Mantener los índices ayuda a que se adapten a los cambios en los datos que puedan afectar a la precisión de los resultados de búsqueda. Sigue las estrategias de esta página para evitar que el rendimiento de las consultas se vea afectado a medida que aumenta el tamaño de tu conjunto de datos.

Ver métricas de índice vectorial

Si tu tabla se actualiza o se insertan datos con frecuencia, te recomendamos que reindexes periódicamente el índice ScaNN para mejorar la precisión de la recuperación de tu índice. Puede monitorizar las métricas de índice para ver los cambios en las distribuciones de vectores o las mutaciones de vectores desde que se creó el índice y, a continuación, volver a indexar según corresponda.

Para obtener más información sobre las métricas, consulta Ver métricas de índice vectorial.

Mantener los índices automáticamente

Puede usar la marca de base de datos scann.enable_index_maintenance Grand Unified Configuration (GUC) junto con el parámetro auto_maintenance a nivel de índice al crear un índice de ScaNN. Si se usan estos ajustes conjuntamente, AlloyDB puede gestionar el índice de forma incremental y dividir las particiones atípicas grandes a medida que crece el conjunto de datos. Al dividir particiones, AlloyDB intenta proporcionar mejores consultas por segundo (QPS) y resultados de búsqueda.

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

Para que AlloyDB mantenga un índice automáticamente, añade la extensión alloydb_scann al parámetro shared_preload_libraries, habilita la marca de base de datos scann.enable_index_maintenance y, a continuación, carga la extensión alloydb_scann reiniciando la base de datos:

  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. Compruebe que el parámetro se ha configurado correctamente:

    grep -iE 'shared_preload_libraries' DATA_DIR/postgresql.conf
  3. Habilita la marca scann.enable_index_maintenance definiéndola en el archivo postgresql.conf:

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

    Docker

     docker container restart CONTAINER_NAME

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

    Podman

     podman container restart CONTAINER_NAME

    Sustituye 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 la función scann_index_maintenance para invocar el mantenimiento manualmente.

Habilitar el mantenimiento automático durante la creación de índices

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);

Haz los cambios siguientes:

  • INDEX_NAME: el nombre del índice que quieras 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: la tabla a la que se va a añadir el índice.

  • EMBEDDING_COLUMN: una columna que almacena vector datos.

  • DISTANCE_FUNCTION: la función de distancia que se va a usar con este índice. Elige una de estas opciones:

    • Distancia L2: l2

    • Producto escalar: dot_product

    • Distancia del coseno: cosine

  • NUM_LEAVES_VALUE: el número de particiones que se aplicarán a este índice. Puede ser cualquier valor entre 1 y 1048576. Para obtener más información sobre cómo decidir este valor, consulta Ajustar un índice de ScaNN.

Invocar el mantenimiento manualmente

Si quieres invocar el mantenimiento de un índice concreto bajo demanda, ejecuta el siguiente comando:

SELECT AS scann_index_maintenance('INDEX_NAME');

Gestionar las hojas para buscar particiones divididas automáticamente

Si has habilitado el mantenimiento automático de los índices, AlloyDB dividirá automáticamente las particiones cuando se alcance el umbral de num_leaves. A medida que aumenta el número de particiones debido a estas divisiones, debes ajustar el número de hojas que se van a buscar para mantener un rendimiento óptimo.

Para gestionar el número de hojas que se deben buscar automáticamente, usa pct_leaves_to_search. Este parámetro le permite especificar un porcentaje del número de particiones que se van a buscar. Si prevés que tu conjunto de datos aumentará considerablemente, empieza asignando el valor pct_leaves_to_search a 1. El parámetro está inhabilitado de forma predeterminada.

Asigna a este campo el porcentaje del número actual de particiones. Por ejemplo, para buscar el 1% del número actual de particiones, defina este valor en 1.

Puede asignar a este parámetro 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 el número de hojas que se deben buscar.

Para definir 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;

Haz los cambios siguientes:

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

Reconstruir el índice manualmente

Puedes volver a crear el índice manualmente si quieres hacerlo con las configuraciones que especificaste cuando se creó.

Para volver a crear el índice manualmente, ejecuta el siguiente comando:

REINDEX INDEX CONCURRENTLY INDEX_NAME;

Sustituye INDEX_NAME por el nombre del índice que quieras volver a compilar (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.

Siguientes pasos