Oracle 23ai Vector Search 系列之1 架构基础

发布于:2025-03-24 ⋅ 阅读:(31) ⋅ 点赞:(0)


【声明】文章仅供学习交流,观点代表个人,与任何公司无关。
来源|Walt@SQL和数据库技术(ID:SQLplusDB)

Oracle 23ai Vector Search 系列之1 架构基础

在AI时代,企业正加速探索与大型语言模型(LLM)结合的检索增强生成(Retrieval Augmented Generation :RAG)功能,这一技术组合被视为下一个关键风口。RAG能够将LLM的生成能力与外部知识库的精准检索相结合,通过将私有数据包含在 LLM 培训数据中避免泄露私有数据并提供更高的准确性。向量数据库以及向量查询等功能也将变得越来越普遍和重要。

Oracle Database 23ai集成了AI Vector Search等功能,支持VECTOR 数据类型,可以直接在 Oracle Database 23ai 中存储向量。

上篇文章介绍了简单安装Oracle 23ai方法,之后就可以进行Vector 相关的学习了。

参考:
Windows 环境图形化安装 Oracle 23ai
https://teacherwhat.blog.csdn.net/article/details/146284908

Oracle AI Vector Search Technical Architecture(技术架构)

下图是Oracle AI Vector Search相关的技术架构图,通过图示可以看到Oracle已经将相关AI技术和SQL*Loader、Datapump,External Table、以及SQL、PL/SQL等技术融合,形成一套新的体系用于支持和LLM结合的相似性搜索(Similarity search)、检索增强生成(RAG)等应用。

在这里插入图片描述

参考:Oracle AI Vector Search Technical Architecture
https://docs.oracle.com/en/database/oracle/oracle-database/23/vsiad/aivs_genarch.html

Oracle AI Vector Search相关参数

Oracle AI Vector Search相关参数,主要包括3个vector_index_neighbor_graph_reload、vector_memory_size

SQL> show parameter VECTOR

NAME                                 TYPE                   VALUE
------------------------------------ ---------------------- ------------------------------
...
vector_index_neighbor_graph_reload   string                 RESTART
vector_memory_size                   big integer            0
vector_query_capture                 string                 ON
SQL>

参考:
Oracle AI Vector Search Parameters
https://docs.oracle.com/en/database/oracle/oracle-database/23/vecse/oracle-ai-vector-search-parameters.html

vector_memory_size参数

23ai版本引入了一个新的内存结构:向量内存池(Vector Memory Pool),主要用于存储Hierarchical Navigable Small World (HNSW)向量索引和相关元数据,同时也用于加速Inverted File Flat (IVF) 索引的创建以及对具有IVF索引的基表的DML操作。

向量内存池(Vector Memory Pool)位于SGA中,Oracle通过 vector_memory_size参数控制这块内存的大小。
vector_memory_size参数可以分别在CDB和PDB级别中指定,CDB级别用于指定当前向量池的大小,PDB级别用于指定当前PDB允许的最大向量池使用量。

初次CDB级别指定当前向量池的大小(vector_memory_size)时,由于数据库暂时未分配相关内存,所以需要通过SCOPE=SPFILE指定,否则会报错。

例:

SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT
SQL> show parameter sga_target

NAME                                 TYPE                   VALUE
------------------------------------ ---------------------- ------------------------------
sga_target                           big integer            1536M
SQL> show parameter vector_memory_size

NAME                                 TYPE                   VALUE
------------------------------------ ---------------------- ------------------------------
vector_memory_size                   big integer            0
SQL> ALTER SYSTEM SET vector_memory_size=500m SCOPE=BOTH;
ALTER SYSTEM SET vector_memory_size=500m SCOPE=BOTH
*
第 1 行出现错误:
ORA-02097: 无法修改参数, 因为指定的值无效
ORA-51950: 无法增加 Oracle 数据库向量内存大小。
帮助:https://docs.oracle.com/error-help/db/ora-02097/

通过spfile指定内存大小。

SQL> ALTER SYSTEM SET vector_memory_size = 512M SCOPE=SPFILE;

系统已更改。

SQL> shutdown abort
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。

Total System Global Area 1603986144 bytes
Fixed Size                  5620448 bytes
Variable Size             352321536 bytes
Database Buffers          704643072 bytes
Redo Buffers                4530176 bytes
Vector Memory Area        536870912 bytes
数据库装载完毕。
数据库已经打开。
SQL> show parameter vector_memory_size;

NAME                                 TYPE                   VALUE
------------------------------------ ---------------------- ------------------------------
vector_memory_size                   big integer            512M
SQL>

CDB指定向量池大小后可以在PDB级别动态修改vector_memory_size 的大小。
例:

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 FREEPDB1                       READ WRITE NO
SQL> alter session set container=FREEPDB1;

会话已更改。

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         3 FREEPDB1                       READ WRITE NO
SQL> show parameter vector_memory_size;

NAME                                 TYPE                   VALUE
------------------------------------ ---------------------- ------------------------------
vector_memory_size                   big integer            512M

SQL> ALTER SYSTEM SET vector_memory_size = 256M SCOPE=BOTH;

系统已更改。

SQL> show parameter vector_memory_size;

NAME                                 TYPE                   VALUE
------------------------------------ ---------------------- ------------------------------
vector_memory_size                   big integer            256M
SQL> SELECT sum(alloc_bytes) FROM V$VECTOR_MEMORY_POOL;

SUM(ALLOC_BYTES)
----------------
       260046848

SQL>

注意PDB指定的vector_memory_size 大小不能超过CDB指定的vector_memory_size 大小。

SQL> ALTER SYSTEM SET vector_memory_size = 1024M SCOPE=BOTH;
ALTER SYSTEM SET vector_memory_size = 1024M SCOPE=BOTH
*
第 1 行出现错误:
ORA-02097: 无法修改参数, 因为指定的值无效
ORA-51955: Oracle 数据库向量内存大小不能增加到超过 512 MB(对于 PDB ID 3)。
帮助:https://docs.oracle.com/error-help/db/ora-02097/


SQL>

参考:
Size the Vector Pool
https://docs.oracle.com/en/database/oracle/oracle-database/23/vecse/size-vector-pool.html

vector_index_neighbor_graph_reload参数

Oracle 23ai 中的 vector_index_neighbor_graph_reload 参数用于控制基于 HNSW 算法的邻居图索引在数据库实例重启后的自动重载行为。该参数通过后台任务机制,实现 HNSW 索引的自动重建和加载,从而减少人工干预并提升系统可用性。

  • vector_index_neighbor_graph_reload 参数为RESTART(默认值)时,实例重启时HNSW索引会自动加载。
  • vector_index_neighbor_graph_reload 参数为OFF时,实例重启时HNSW索引不会自动加载。
SQL> show parameter vector_index_neighbor_graph_reload

NAME                                 TYPE                   VALUE
------------------------------------ ---------------------- ------------------------------
vector_index_neighbor_graph_reload   string                 RESTART
SQL>

参考:
Understand HNSW Index Population Mechanisms in Oracle RAC or Single Instance
https://docs.oracle.com/en/database/oracle/oracle-database/23/vecse/understand-hnsw-index-population-mechanisms-oracle-rac-and-single-instance.html

vector_query_capture参数

VECTOR_QUERY_CAPTURE 参数用于控制查询向量的捕获功能。该参数默认值为 ON,启用后数据库会通过抽样机制捕获部分查询向量。

SQL> show parameter vector_query_capture

NAME                                 TYPE                   VALUE
------------------------------------ ---------------------- ------------------------------
vector_query_capture                 string                 ON
SQL>

参考:
Index Accuracy Report
https://docs.oracle.com/en/database/oracle/oracle-database/23/vecse/index-accuracy-report.html#GUID-A084929C-7A04-4764-9E5B-1204E0844CAF

参考

Oracle AI Vector Search
https://www.oracle.com/database/ai-vector-search/

Oracle AI Vector Search User’s Guide
https://docs.oracle.com/en/database/oracle/oracle-database/23/vecse/overview-ai-vector-search.html


网站公告

今日签到

点亮在社区的每一天
去签到