Métricas del índice vectorial

Selecciona una versión de la documentación:

En esta página, se enumeran las métricas relacionadas con los índices vectoriales que generas en AlloyDB Omni. Puedes ver estas métricas con la vista pg_stat_ann_indexes que está disponible cuando instalas la extensión alloydb_scann.

Para obtener más información sobre cómo ver las métricas, consulta Cómo ver las métricas del índice vectorial.

Métricas de usabilidad

Las métricas de usabilidad incluyen métricas que te ayudan a comprender el estado de la utilización del índice, como la configuración del índice y la cantidad de análisis del índice.

Nombre de la métrica Tipo de datos Descripción
relid OID Identificador único de la tabla que contiene el índice de vectores
indexrelid OID Identificador único del índice de vectores
schemaname NAME Nombre del esquema propietario del índice
relname NAME Nombre de la tabla que contiene el índice
indexrelname NAME Nombre del índice
indextype NAME Es el tipo de índice. Este valor siempre se establece en scann.
indexconfig TEXT[] Es la configuración, como el recuento de hojas y el cuantificador, que se definió para el índice cuando se creó.
indexsize TEXT Tamaño del índice
indexscan BIGINT Cantidad de análisis de índice iniciados en el índice

Métricas de ajuste

Las métricas de ajuste proporcionan estadísticas sobre la optimización actual del índice, lo que te permite aplicar recomendaciones para mejorar el rendimiento de las consultas.

Nombre de la métrica Tipo de datos Descripción
insertcount BIGINT Cantidad de operaciones de inserción en el índice. Esta métrica también incluye la cantidad de filas que existían antes de que se creara el índice.
updatecount BIGINT Cantidad de operaciones de actualización en el índice. Esta métrica no tiene en cuenta las actualizaciones de HOT.
deletecount BIGINT Cantidad de operaciones de eliminación en el índice.
distribution JSONB Son las distribuciones de vectores en todas las particiones del índice.

En los siguientes campos, se muestra la distribución:
  • maximum (INT8): Es la cantidad máxima de vectores en todas las particiones.
  • minimum (INT8): Es la cantidad mínima de vectores en todas las particiones.
  • average (FLOAT) : Es la cantidad promedio de vectores en todas las particiones.
  • outliers (INT8[]): Son los valores atípicos principales en todas las particiones. Este valor muestra los 20 valores atípicos principales.

Nota: Debido a las características inherentes del algoritmo de agrupamiento K-means, siempre habrá cierto grado de varianza en la distribución de los vectores en las particiones, incluso cuando se cree el índice inicialmente.
distributionpercentile JSONB La distribución del índice de vectores te ayuda a comprender la distribución de los vectores entre las particiones de tu índice de ScaNN. Las particiones se crean según el valor de num_leaves definido durante la creación del índice.

La distribución del índice de vectores contiene buckets para los percentiles 10, 25, 50, 75, 90, 95, 99 y 100. Cada bucket contiene los siguientes valores:
  • Cantidad de vectores presentes en la partición en el percentil especificado.
  • Cantidad de particiones que tienen vectores dentro del rango definido por los percentiles actual y anterior.

Nota: Debido a las características inherentes del algoritmo de agrupamiento K-means, siempre hay cierto grado de varianza en la distribución de los vectores en las particiones, incluso cuando se crea el índice inicialmente.

Ajuste de la recomendación según las métricas

Mutación
Las métricas insertcount, updatecount y deletecount juntas muestran los cambios o las mutaciones en el vector del índice.
El índice se crea con una cantidad específica de vectores y particiones. Cuando se realizan operaciones como insertar, actualizar o borrar en el índice de vectores, solo se ven afectadas las particiones iniciales en las que residen los vectores. Por lo tanto, la cantidad de vectores en cada partición fluctúa con el tiempo, lo que puede afectar la recuperación, las QPS o ambas.
Si, con el tiempo, tienes problemas de lentitud o precisión, como un QPS bajo o una recuperación deficiente, en tus búsquedas de ANN, considera revisar estas métricas. Una gran cantidad de mutaciones en relación con la cantidad total de vectores podría indicar la necesidad de volver a indexar.
Distribución
La métrica distribution muestra las distribuciones de vectores en todas las particiones.
Cuando creas un índice, este se crea con una cantidad específica de vectores y particiones fijas. El proceso de partición y la distribución posterior se realizan en función de esta consideración. Si se agregan vectores adicionales, se particionan entre las particiones existentes, lo que genera una distribución diferente en comparación con la distribución cuando se creó el índice. Dado que la distribución final no considera todos los vectores de forma simultánea, es posible que se vean afectados el recall, las QPS o ambos.
Si observas una disminución gradual en el rendimiento de tus búsquedas de ANN, como tiempos de respuesta más lentos o una menor precisión en los resultados (medida por QPS o recuperación), considera revisar esta métrica y volver a indexar.
Percentil de distribución
La métrica distributionpercentile es una distribución del índice de vectores en la vista pg_stat_ann_indexes que te ayuda a comprender la distribución de los vectores entre las particiones de tu índice de ScaNN. Las particiones se crean en función del valor de num_leaves definido durante la creación del índice.
Cuando creas un índice alloydb_scann en el conjunto inicial de filas estableciendo num_leaves, el índice puede cambiar la distribución de los vectores en las particiones debido a las operaciones de datos (mutaciones de sesgo), o bien la cantidad de vectores puede aumentar significativamente. Estos cambios pueden provocar una degradación de las QPS, la recuperación o ambas. La distribución del índice de vectores puede proporcionarte indicadores si la mutación provoca un cambio en la distribución del índice. Esta información puede ayudarte a determinar si se requiere una reindexación o si un cambio en la configuración del tiempo de búsqueda puede ayudar a mejorar el rendimiento de las búsquedas.
En un índice de vectores, la distribución de los vectores entre las particiones rara vez es perfectamente uniforme. Este desequilibrio se conoce como distribución no uniforme. A menudo, se espera un cierto grado de no uniformidad, lo que no significa que debas volver a indexar. Una distribución no uniforme tiene las siguientes características:
  • La varianza de la cantidad de vectores es baja. La varianza se puede calcular como
    $(P100(num\_vectors) - p10(num\_vectors))*(\frac{num\_leaves}{total\_num\_row})$
  • La cantidad de particiones con 0 vectores es baja y podría ser inferior al 30% de las particiones.
  • La varianza de la cantidad de particiones es baja.
    $ variance _{p} = abs(p_{num\_partitions} - num\_leaves * (p_{percentile} - p-1_{percentile})) $ donde "p" es un bucket de distribución de índice de vector.
  • La cantidad de vectores en cualquier percentil es
    $< 8 x (\frac{num\_rows\ during\ index\ creation\ time}{ num\_leaves})$

    Cuando no se cumplen estas condiciones, es posible que se requiera REINDEX según la cantidad de QPS y la recuperación afectadas.
Las siguientes situaciones, aunque son menos comunes que la distribución no uniforme, pueden ocurrir:
  • Índice uniforme aproximado: Cuando la mayoría de las particiones tienen la misma cantidad de vectores distintos de cero y la varianza de la cantidad de vectores es baja, se trata de un índice uniforme aproximado. Se requiere REINDEX si los vectores de número en cada partición son> 8 * vector promedio en index_creation_time.
  • Índice disperso: También se produce un índice disperso cuando más del 50% de las particiones están vacías. Por ejemplo, se crea un índice disperso cuando se producen varias eliminaciones en una tabla. En esta situación, los vectores se concentran en una pequeña cantidad de particiones, lo que aumenta la cantidad de vectores en cada partición. Cuando esto suceda, descarta el índice y vuelve a crearlo.