Métricas de índice de vectores

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. Puede consultar estas métricas con la pg_stat_ann_indexesvista que está disponible cuando instala la extensión alloydb_scann.

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

Métricas de usabilidad

Las métricas de usabilidad incluyen métricas que le ayudan a comprender el estado de la utilización de índices con métricas, como la configuración de índices y el número de análisis de índices.

Nombre de la métrica Tipo de datos Descripción
relid OID Identificador único de la tabla que contiene el índice vectorial
indexrelid OID Identificador único del índice vectorial.
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 Tipo de índice. Este valor siempre es scann.
indexconfig TEXT[] Configuración, como el recuento de hojas y el cuantificador, definida para el índice cuando se creó
indexsize TEXT Tamaño del índice
indexscan BIGINT Número de análisis de índice iniciados en el índice

Métricas de ajuste

Las métricas de ajuste te ofrecen información valiosa sobre la optimización de tus índices, 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 Número de operaciones de inserción en el índice. Esta métrica también incluye el número de filas que había antes de crear el índice.
updatecount BIGINT Número de operaciones de actualización en el índice. Esta métrica no tiene en cuenta las actualizaciones HOT.
deletecount BIGINT Número de operaciones de eliminación en el índice.
distribution JSONB Distribuciones de vectores en todas las particiones del índice.

Los siguientes campos muestran la distribución:
  • maximum (INT8): número máximo de vectores en todas las particiones.
  • minimum (INT8): número mínimo de vectores en todas las particiones.
  • average (FLOAT) : número medio de vectores en todas las particiones.
  • outliers (INT8[]): valores atípicos principales de todas las particiones. Este valor muestra los 20 valores atípicos principales.

Nota: Debido a las características inherentes del algoritmo de clustering K-means, siempre habrá cierto grado de varianza en la distribución de vectores entre particiones, incluso cuando se cree el índice inicialmente.
distributionpercentile JSONB La distribución del índice vectorial 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.

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

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

Recomendación de ajuste basada en las métricas

Mutation
Las métricas insertcount, updatecount y deletecount muestran los cambios o las mutaciones en el vector del índice.
El índice se crea con un número específico de vectores y particiones. Cuando se realizan operaciones como insertar, actualizar o eliminar en el índice vectorial, solo afectan al conjunto inicial de particiones en las que residen los vectores. Por lo tanto, el número de vectores de cada partición fluctúa a lo largo del tiempo, lo que puede afectar al recuerdo, a las QPS o a ambos.
Si observas que las consultas de búsqueda de ANN son lentas o imprecisas (por ejemplo, si el QPS es bajo o la recuperación es deficiente) con el tiempo, te recomendamos que revises estas métricas. Un número elevado de mutaciones en relación con el número 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, se crea con un número específico 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 añaden vectores adicionales, se particionan entre las particiones existentes, lo que da como resultado una distribución diferente a la que había cuando se creó el índice. Como la distribución final no tiene en cuenta todos los vectores simultáneamente, puede que se vean afectados la recuperación, las consultas por segundo o ambos.
Si observa un descenso gradual en el rendimiento de sus consultas de búsqueda de ANN, como tiempos de respuesta más lentos o una menor precisión en los resultados (medida por QPS o recuperación), le recomendamos que compruebe esta métrica y vuelva a indexar.
Percentil de distribución
La métrica
distributionpercentile es una distribución de índices de vectores en la vista pg_stat_ann_indexes que te ayuda a entender la distribución de vectores entre las particiones de tu índice ScaNN. Las particiones se crean en función del valor num_leaves definido durante la creación del índice.
Cuando creas un índice alloydb_scann en el conjunto inicial de filas definiendo 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 el número de vectores puede aumentar significativamente. Estos cambios pueden provocar una degradación de las QPS, del recuerdo o de ambos. La distribución del índice vectorial puede proporcionarte señales si la mutación provoca un cambio en la distribución del índice. Esta información puede ayudarte a determinar si es necesario volver a indexar o si un cambio en las configuraciones del tiempo de búsqueda puede mejorar el rendimiento de las consultas.
En un índice vectorial, la distribución de los vectores entre las particiones rara vez es perfectamente uniforme. Este desequilibrio se denomina distribución no uniforme. A menudo se espera un cierto grado de no uniformidad, lo que no significa que tengas que volver a indexar. Una distribución no uniforme tiene las siguientes características:
  • La varianza del número de vectores es baja. La varianza se puede calcular como
    $(P100(num\_vectors) - p10(num\_vectors))*(\frac{num\_leaves}{total\_num\_row})$
  • El número de particiones con 0 vectores es bajo y puede ser inferior al 30% de las particiones.
  • La varianza del número de particiones es baja.
    $ varianza _{p} = abs(p_{num\_partitions} - num\_leaves * (p_{percentile} - p-1_{percentile})) $ donde "p" es un contenedor de distribución de índice de vector.
  • El número de vectores en cualquier percentil es
    $< 8 x (\frac{num\_rows\ during\ index\ creation\ time}{ num\_leaves})$

    Si no se cumplen estas condiciones, es posible que se requiera REINDEX en función de la cantidad de consultas por segundo y de la retención afectadas.
Aunque son menos habituales que la distribución no uniforme, pueden darse las siguientes situaciones:
  • Índice uniforme aproximado: cuando la mayoría de las particiones tienen el mismo número de vectores distintos de cero y la varianza del número de vectores es baja, se trata de un índice uniforme aproximado. REINDEX es obligatorio si el número de vectores de cada partición es $> 8 * average vector$ 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 este caso, los vectores se concentran en un número reducido de particiones, lo que aumenta el número de vectores de cada partición. Cuando esto ocurra, elimina el índice y vuelve a crearlo.