sábado, 6 de junio de 2026

Error creando índice tipo VECTOR en Oracle AI Database 26ai- ORA-51962: The vector memory area is out of space for the current container



Estas trabajando con campos tipo vector en Oracle AI Database 26ai y deseas crear un índice de tipo vectorial y recibes un ORA-51962. Qué debes hacer. ?

Primero que todo, un índice vectorial es una estructura de datos especializada que permite localizar rápidamente los vectores más similares a un vector de consulta dentro de un espacio multidimensional, evitando tener que comparar el vector buscado contra todos los vectores almacenados.

En Oracle AI Database 26ai, los índices vectoriales están diseñados para acelerar operaciones de Nearest Neighbor Search (NNS) utilizadas en sistemas de búsqueda semántica, RAG (Retrieval-Augmented Generation), recomendación de contenido, detección de similitud y aplicaciones de inteligencia artificial.

ORA-51962 significa que el Vector Pool del contenedor actual no tiene espacio libre suficiente o que el parámetro que controla esta estructura a nivel del SGA no ha sido configurado.

Oracle AI Database 26ai, no configura valores de facto para el parámetro VECTOR_MEMORY_SIZE. El valor de facto del parámetro es 0.

El error puede dar, ya sea porque el parámetro esta con valor 0 o bien, que el espacio en el "Pool", ha sido agotado.

Una consulta a la vista dinámica de la base de datos v$vector_index, te permite validar como se esta utilizando el espacio del VECTOR POOL.


Puedes también utilizar la siguiente consulta para obtener un mejor detalle de ocupación en MBytes.

SET LINESIZE 220
SET PAGESIZE 100

COLUMN owner              FORMAT A20
COLUMN index_name         FORMAT A35
COLUMN partition_name     FORMAT A25
COLUMN index_organization FORMAT A30
COLUMN distance_type      FORMAT A15
COLUMN allocated_mb       FORMAT 999,999,990.00
COLUMN used_mb            FORMAT 999,999,990.00
COLUMN pct_used           FORMAT 990.00
COLUMN pct_free           FORMAT 990.00

SELECT owner,
       index_name,
       index_organization,
       distance_type,
       index_dimensions,
       num_vectors,
       ROUND(allocated_bytes / 1024 / 1024, 2) AS allocated_mb,
       ROUND(used_bytes      / 1024 / 1024, 2) AS used_mb,
       ROUND((used_bytes / NULLIF(allocated_bytes, 0)) * 100, 2) AS pct_used,
       ROUND((1 - (used_bytes / NULLIF(allocated_bytes, 0))) * 100, 2) AS pct_free,
       index_used_count,
       con_id
FROM   v$vector_index
ORDER  BY pct_used DESC NULLS LAST;

Puedes obtener una versión más resumida de la ocupación de los índices con la siguiente consulta.

SELECT owner,
       index_name,
       SUM(num_vectors) AS total_vectors,
       ROUND(SUM(allocated_bytes) / 1024 / 1024, 2) AS allocated_mb,
       ROUND(SUM(used_bytes)      / 1024 / 1024, 2) AS used_mb,
       ROUND((SUM(used_bytes) / NULLIF(SUM(allocated_bytes), 0)) * 100, 2) AS pct_used
FROM   v$vector_index
GROUP  BY owner, index_name
ORDER  BY pct_used DESC;


Si la situación es que el parámetro no ha sido configurado, debes seguir los siguientes pasos.

Te mostraré como hacer la configuración del parámetro y como luego se puede crear el índice sin inconvenientes.

Detalle importante, el parámetro no es dinámico, por tanto, vas a necesitar reiniciar el contenedor de base de datos.


SQL*Plus: Release 23.26.1.0.0 - Production on Sat Jun 6 22:44:12 2026
Version 23.26.1.0.0

Copyright (c) 1982, 2025, Oracle.  All rights reserved.

Last Successful login time: Sat Jun 06 2026 21:41:10 +00:00

Connected to:
Oracle AI Database 26ai Enterprise Edition Release 23.26.1.0.0 - Production
Version 23.26.1.0.0

SQL> CREATE VECTOR INDEX IDX_CHUNKS_EMBEDDING_HNSW
ON documentos_pdf (EMBEDDING)
ORGANIZATION INMEMORY NEIGHBOR GRAPH
DISTANCE COSINE
WITH TARGET ACCURACY 95
PARAMETERS (
  TYPE HNSW,
  NEIGHBORS 32,
  EFCONSTRUCTION 500
);

ON documentos_pdf (EMBEDDING)
   *
ERROR at line 2:
ORA-51962: The vector memory area is out of space for the current container.
Help: https://docs.oracle.com/error-help/db/ora-51962/

SQL> connect / as sysdba
Connected.
SQL> show user
USER is "SYS"
SQL> SHOW PARAMETER vector_memory_size;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
vector_memory_size                   big integer 0

SQL> alter system set vector_memory_size=1g scope=both;
alter system set vector_memory_size=1g scope=both
*
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-51950: The Oracle Database Vector Memory size cannot be increased.
Help: https://docs.oracle.com/error-help/db/ora-02097/


SQL> alter system set vector_memory_size=1g scope=spfile;

System altered.

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> startup
ORACLE instance started.

Total System Global Area 1.5717E+10 bytes
Fixed Size                  5027392 bytes
Variable Size            1979711488 bytes
Database Buffers         1.2650E+10 bytes
Redo Buffers                8855552 bytes
Vector Memory Area       1073741824 bytes
Database mounted.
Database opened.
SQL> SHOW PARAMETER vector_memory_size; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ vector_memory_size big integer 1G SQL> connect sh/sh@pdb1 Connected SQL> CREATE VECTOR INDEX IDX_CHUNKS_EMBEDDING_HNSW ON documentos_pdf (EMBEDDING) ORGANIZATION INMEMORY NEIGHBOR GRAPH DISTANCE COSINE WITH TARGET ACCURACY 95 PARAMETERS ( TYPE HNSW, NEIGHBORS 32, EFCONSTRUCTION 500 );
Index created.

Para que sirve este índice.?

índice vectorial HNSW sobre la columna EMBEDDING de la tabla DOCUMENTOS_PDF

para acelerar búsquedas de similitud semántica en Oracle AI Database 26ai.

Veámosla línea por línea:

CREATE VECTOR INDEX IDX_CHUNKS_EMBEDDING_HNSW
ON documentos_pdf (EMBEDDING)
  • Crea un índice llamado IDX_CHUNKS_EMBEDDING_HNSW.
  • El índice se construye sobre la columna EMBEDDING.
  • Dicha columna contiene vectores generados por un modelo de embeddings
  • (texto, imágenes, audio, etc.).

Ejemplo:

[0.125, -0.234, 0.567, ...]

Cada vector representa el significado semántico de un chunk de documento.

ORGANIZATION INMEMORY NEIGHBOR GRAPH

Indica que Oracle utilizará una estructura de datos optimizada para búsquedas

ANN (Approximate Nearest Neighbor).

En lugar de comparar el vector de búsqueda contra todos los registros de la tabla:

Vector Consulta
|
v
Comparar contra 10 millones de vectores

Oracle construye un grafo donde cada vector conoce a sus vecinos más cercanos:

      A
/ | \
B C D
|\/ \|
E----F

La búsqueda "navega" por el grafo hasta encontrar los vectores más similares.

Beneficio:

  • Mucho más rápido.
  • Menor uso de CPU.
  • Escalable a millones de embeddings.

DISTANCE COSINE

Define la métrica de similitud.

Oracle calculará: Cosine Similarity entre el vector buscado y los vectores almacenados.

Matemáticamente:

A · B
-------
|A||B|

Valores:

ResultadoInterpretación
1Idénticos
0.9Muy similares
0.5Relación moderada
0Sin relación

Para RAG y documentos generalmente es la opción más utilizada.

Ejemplo:

Consulta:"¿Qué es Oracle RAC?"

Aunque el documento diga:"Real Application Clusters permite..."

los embeddings tendrán direcciones parecidas y la distancia coseno será pequeña.

WITH TARGET ACCURACY 95

Oracle intentará devolver aproximadamente el 95% de los vecinos que encontraría

una búsqueda exacta.

Existe un compromiso entre:

ExactitudVelocidad
100%Más lenta
95%Muy rápida
90%Más rápida
80%Extremadamente rápida

En RAG normalmente:

90 - 95 %

es un excelente equilibrio.

PARAMETERS

TYPE HNSW

Utiliza el algoritmo:Hierarchical Navigable Small World

Actualmente es uno de los algoritmos ANN más utilizados en sistemas vectoriales modernos.

También es usado en motores como:

  • FAISS
  • Milvus
  • Qdrant
  • OpenSearch

NEIGHBORS 32

También conocido como parámetro M en HNSW.

Indica cuántas conexiones tendrá cada nodo del grafo.

Visualmente:

Vector A
|
+----32 vecinos

Mayor valor: NEIGHBORS 64

  • Más memoria.
  • Índice más grande.
  • Mejor calidad de búsqueda.

Menor valor:NEIGHBORS 16

  • Menor tamaño.
  • Menor precisión.

Valor 32 suele ser una configuración equilibrada.

EFCONSTRUCTION 500

EFCONSTRUCTION 500

Controla la calidad durante la construcción del índice.

Cuando Oracle inserta cada vector:

Nuevo Vector
|
v
Busca 500 candidatos
|
v
Escoge los mejores vecinos

Valores típicos:

ValorCalidad
100Básica
200Buena
500Muy buena
1000Excelente

Con:EFCONSTRUCTION 500

Oracle dedica más trabajo al construir el índice para obtener mejores

resultados posteriormente.

Impacto:

  • Creación más lenta.
  • Índice de mayor calidad.
  • Búsquedas más precisas.

No hay comentarios:

Publicar un comentario

Te agradezco tus comentarios. Te esperamos de vuelta.

Todos los Sábados a las 8:00PM