38-Oracle 23 ai Accelerate Securefiles LOB Performance

发布于:2025-06-19 ⋅ 阅读:(17) ⋅ 点赞:(0)

小伙伴们在日常的操作中,使用LOB对象会很多么,工业的附件、医疗的图像、电子病历的长长的几千上万字的描述和图像等,这些在查询和使用过程中都是极度折磨,第一速度慢、第二是占用超大空间,且业务需要从这些字段中拆解信息,统计、上传等。

Oracle的大对象(LOB)存储技术经历了从BasicFile到SecureFile的革新,在23 ai默认用SecureFile带来性能与智能管理的提升。

一、LOB技术原理与架构解析

LOB(Large Object)​​ 是Oracle处理大文件(如图片、视频、文档)的核心数据类型,分为:

  • BLOB​:二进制数据(如图像)
  • CLOB​:字符数据(如日志文件)
  • NCLOB​:Unicode字符数据
  • BFILE​:指向外部文件的指针
存储架构核心机制
  • 行内/行外存储
  1. 小LOB(≤4000B)直接存储在表行中
  2. 大LOB使用“LOB定位器”指向外部LOB段
  • 分块存储(Chunking)​
  1. LOB数据被拆分为多个块(Chunk)
  2. 每个Chunk包含Header(元数据)和Body(实际数据)
  3. 大块(如32KB)减少I/O操作,提升大文件读写效率
  • LOB索引机制
  1. SYS_LOB$$对象管理LOB块的物理地址
  2. 索引结构优化大文件随机访问性能

 实践脚本:创建含LOB列的表

SYS@CDB$ROOT> 
create tablespace SECURE_LOB_TS 
DATAFILE 'SECURE_LOB_TS.dbf' size 100M 
autoextend ON SEGMENT SPACE MANAGEMENT AUTO;

--Tablespace SECURE_LOB_TS created.

    CREATE TABLE medical_images (
      image_id NUMBER PRIMARY KEY,
      description VARCHAR2(100),
      image_data BLOB
    ) LOB(image_data) STORE AS SECUREFILE (
      TABLESPACE SECURE_LOB_TS 
      COMPRESS HIGH 
      DEDUPLICATE
    );
--Table MEDICAL_IMAGES created.

二、SecureFile 在LOB上的提升

自11g引入的SecureFile彻底重构了LOB存储,19c可以选择是否SecureFile,23 ai 默认SecureFile,有了这个支持才有了向量数据存入lob字段,存储体验SecureFile的速度和性能。

​关键技术特性

​特性​

​BasicFile​

​SecureFile​

​23ai 增强​

​压缩​

不支持

支持(HIGH/MEDIUM/LOW)

自适应压缩等级选择

​重复数据删除​

不支持

表/分区级去重

跨分区去重

加密​

需要额外工具

原生透明加密

整合Oracle Key Vault

​性能​

较低

读写速度提升5-8倍

向量化AI加速扫描

脚本实测(23 ai环境)​ 
-- 测试SecureFile与BasicFile读性能
ALTER SESSION SET db_securefile = 'FORCE';
--Session altered.
CREATE TABLE medical_images (
      image_id NUMBER PRIMARY KEY,
      description VARCHAR2(100),
      image_data BLOB
    ) LOB(image_data) STORE AS SECUREFILE (
      TABLESPACE SECURE_LOB_TS 
      COMPRESS HIGH 
      DEDUPLICATE
    );
--Table MEDICAL_IMAGES created.

CREATE TABLE test_basicfile (id NUMBER, data BLOB) 
  LOB(data) STORE AS BASICFILE;
  
CREATE TABLE test_basicfile (
      image_id NUMBER PRIMARY KEY,
      description VARCHAR2(100),
      image_data BLOB
    ) LOB(image_data) STORE AS basicfile (
      TABLESPACE SECURE_LOB_TS 
    );
--Table TEST_BASICFILE created.

--SecureFile启用HIGH压缩和去重

-- 查询表空间的空间管理方式
SELECT tablespace_name, segment_space_management 
FROM dba_tablespaces 
WHERE tablespace_name = 'SECURE_LOB_TS';

-- 查询LOB的存储属性
ALTER TABLE medical_images ALLOCATE EXTENT;
ALTER TABLE test_basicfile ALLOCATE EXTENT;
--
SELECT table_name, securefile, compression, deduplication 
FROM dba_lobs WHERE table_name='MEDICAL_IMAGES';
--
TABLE_NAME        SECUREFILE    COMPRESSION    DEDUPLICATION
_________________ _____________ ______________ ________________
MEDICAL_IMAGES    YES           HIGH           LOB

--
SELECT table_name, securefile, compression, deduplication 
FROM dba_lobs WHERE table_name='TEST_BASICFILE';
--
TABLE_NAME         SECUREFILE    COMPRESSION    DEDUPLICATION
__________________ _____________ ______________ ________________
TEST_BASICFILE    YES           NO             NO

三、典型应用场景与优化实践

场景1:医疗PACS系统(BLOB存储)​
  • 需求​:高压缩比保存CT影像,支持快速调阅
  • 建表​:
CREATE TABLE ct_scans (
  scan_id NUMBER, 
  patient_id NUMBER,
  scan_data BLOB
    ) LOB(scan_data) STORE AS SECUREFILE (
      TABLESPACE SECURE_LOB_TS 
      COMPRESS HIGH 
      DEDUPLICATE
    );
场景2:文档管理(CLOB去重)​
  • 现状:重复文档版本占用空间
  • 优化​:
CREATE TABLE contracts (
  contract_id   NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  contract_name VARCHAR2(100),
  sign_date     DATE DEFAULT SYSDATE,
  contract_text CLOB
)
LOB(contract_text) STORE AS SECUREFILE (  -- 启用SecureFile特性
  TABLESPACE SECURE_LOB_TS
  COMPRESS HIGH          -- 启用高压缩
  DEDUPLICATE            -- 启用去重(初始状态)
  CACHE                  -- 缓存高频访问数据
);
--Table CONTRACTS created.
-- 测试:插入10,000份相似合同
DECLARE
  base_text CLOB := '本合同由甲方...(此处为1KB基础合同模板)';
BEGIN
  FOR i IN 1..10000 LOOP
    INSERT INTO contracts (contract_name, contract_text)
    VALUES (
      'CONTRACT_' || i,
      base_text || CHR(10) || '附加条款: ' || DBMS_RANDOM.STRING('X', 10)  -- 添加随机差异
    );
  END LOOP;
  COMMIT;
END;
/
--PL/SQL procedure successfully completed.
-- 查看实际空间占用
SELECT 
  segment_name,
  ROUND(bytes/1024/1024, 2) AS size_mb
FROM user_segments 
WHERE segment_name IN (
  SELECT segment_name 
  FROM user_lobs 
  WHERE table_name = 'CONTRACTS'
);
--
SEGMENT_NAME                    SIZE_MB
____________________________ __________
SYS_LOB0000073323C00004$$          0.25
--
-- 对比去重开关状态的空间差异
ALTER TABLE contracts MODIFY LOB(contract_text) (KEEP_DUPLICATES);  -- 关闭去重
ALTER TABLE contracts MODIFY LOB(contract_text) (DEDUPLICATE);      -- 启用去重

四、迁移与维护实战指南

​BasicFile → SecureFile迁移
-- 在线迁移
ALTER TABLE test_basicfile MOVE 
  LOB(image_data) STORE AS SECUREFILE (
      TABLESPACE SECURE_LOB_TS 
      COMPRESS HIGH 
      DEDUPLICATE
);
--Table TEST_BASICFILE altered.

-- 监控进度
SELECT table_name, securefile, compression, deduplication 
FROM dba_lobs WHERE table_name='TEST_BASICFILE';
TABLE_NAME        SECUREFILE    COMPRESSION    DEDUPLICATION
_________________ _____________ ______________ ________________
TEST_BASICFILE    YES           HIGH           LOB

维护操作

  • 空间回收

-- 在线启用去重-无需重建表去重
ALTER TABLE contracts MODIFY LOB(contract_text) (
  DEDUPLICATE);
--Table CONTRACTS altered.
  -- 确认LOB类型为SecureFile
SELECT table_name, securefile 
FROM dba_lobs 
WHERE table_name = 'CONTRACTS';  -- 应返回"YES"
--
TABLE_NAME    SECUREFILE
_____________ _____________
CONTRACTS     YES

-- 检查去重状态
SELECT deduplication 
FROM dba_lobs 
WHERE table_name = 'CONTRACTS';
--
DEDUPLICATION
________________
LOB
  •  统计信息收集
EXEC DBMS_STATS.GATHER_TABLE_STATS(ownname => 'SYS',
tabname => 'MEDICAL_IMAGES',
method_opt => 'FOR COLUMNS image_data SIZE AUTO');
--
PL/SQL procedure successfully completed.

五、总结与最佳实践建议

Oracle 23 ai的SecureFile LOB成为大文件存储首选:
  • 存储效率革命​:压缩与去重降低70%+空间占用
  • 性能飞跃​:读写速度提升5-8倍
  • 向量保存​:兼容未来AI场景
实施建议​:
  • 新系统​:直接使用SecureFile + 分区 + 去重
  • 迁移系统​:在线迁移结合AI压缩等级推荐
  • AI场景​:优先使用向量化LOB元数据加速分析
  • 避坑指南​:避免跨DB链接的LOB操作;NOCACHE适用于归档数据
最终的演进方向已经很清晰:​SecureFile已成为非结构化数据管理的技术基石,而23 ai的AI集成正在重新定义LOB的智能管理范式。

网站公告

今日签到

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