文章目录
- Oracle 23ai Vector Search 系列之1 架构基础
- Oracle AI Vector Search Technical Architecture(技术架构)
- Oracle AI Vector Search相关参数
- vector_memory_size参数
- vector_index_neighbor_graph_reload参数
- vector_query_capture参数
- 参考
【声明】文章仅供学习交流,观点代表个人,与任何公司无关。
来源|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 VECTORNAME 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_nameCON_NAME
------------------------------
CDB$ROOT
SQL> show parameter sga_targetNAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
sga_target big integer 1536M
SQL> show parameter vector_memory_sizeNAME 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 pdbsCON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------2 PDB$SEED READ ONLY NO3 FREEPDB1 READ WRITE NO
SQL> alter session set container=FREEPDB1;会话已更改。SQL> show pdbsCON_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 512MSQL> 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)
----------------260046848SQL>
注意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_reloadNAME 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_captureNAME 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