35-Oracle Advanced compress-23 ai Improved HCC

小伙伴们在日常建表和维护的时候,有没有尝试压缩功能,提高查询速度、压缩空间、导出导入快,功能是真香。OCM考试时候也是必考项目。SQL直接使用压缩字段即可,用sqldeveloper图形界面也可以选择,当时速度慢一些。

一、Oracle Advanced Compression 的特性主要功能

减少数据库存储

数据库存储减少 50%(或更多)使用 Oracle Advanced Compression 将整体数据库存储减少至少 2 倍,在实施过程中几乎不会中断。

推迟将来的数据库存储购买或租赁(上云就有体会了或是本地用上全闪的时候成本高)

减小应用程序数据库的总数据大小,以更好地利用现有数据库存储并降低未来的增长。

提高查询性能

数据在内存中保持压缩状态,在数据库中构建压缩功能使 Oracle Database 可以直接在内存中读取压缩数据和索引。

提高了缓冲区缓存效率

Oracle Database 压缩对读取作没有不利影响,并且数据库的缓冲区缓存在不增加内存的情况下存储更多数据,从而提高了效率。

更快的 RMAN 备份和恢复

在 RMAN 备份期间,数据保持压缩状态

压缩数据在 RMAN 备份期间保持压缩状态,无需在恢复前解压缩,从而减少备份存储需求,并可能缩短备份和还原时间。

其他级别的 RMAN 备份压缩

Oracle Advanced Compression 提供三个级别的 RMAN 备份压缩:低、中和高。节省的存储空间从低增加到高,并且通常比 RMAN 基本压缩使用的 CPU 资源少。

减少网络流量

网络压缩,高级网络压缩(Advanced Network Compression,也称为 SQL 网络数据压缩)在传输过程中压缩网络数据以减少网络流量。

Data Guard 重做传输压缩

Data Guard 重做传输服务将重做数据传输到备用站点。重做数据使用 Oracle Advanced Compression 进行压缩,然后以压缩形式传输。这减少了网络带宽消耗和重做数据的传输时间。

100% 应用程序透明度

无需更改应用程序或特殊硬件,Oracle Database 压缩内置于数据库中,无需更改应用程序即可运行 Oracle Advanced Compression。

二、使用场景:

  • 历史数据归档优化
  • 数据仓库中访问频率随年限急剧下降的历史数据(如5年前数据访问率<0.1%),通过高压缩比技术(如HCC归档压缩)解决存储成本倒挂问题。典型场景如医疗各种描述信息、缴费数据、费用清单等需长期留存但低频访问的数据,压缩比可达10-15倍。
  • 数仓查询性能加速
  • 针对海量数据的分析场景(如亿级销售报表查询),压缩技术通过减少物理I/O量(压缩后数据量可降至1/3)实现查询加速。关键原理:磁盘读取时间缩减量 > 内存解压耗时,整体查询性能提升30%-50%,特别适合BI报表、聚合分析等IO密集型操作。
  • OLTP系统存储优化
  • 高吞吐事务系统采用分层压缩策略:
  • 热数据​(当天产生):禁用压缩保障写入性能
  • 温数据​(近7天):启用OLTP压缩(3-4x)平衡性能与空间
  • 冷数据​(超30天):迁移至HCC压缩分区通过定时任务在业务低谷期执行压缩迁移(示例:每日凌晨ALTER TABLE MOVE分区转换压缩算法)
    谨慎的场景​:存在大字段(如CLOB备注)且需高频update的表,压缩将引发行迁移导致性能崩塌。必须采用"解压→更新→压缩"三步。

三、Oracle压缩技术

Oracle提供多层次的压缩方案,核心原理是通过消除数据冗余减少存储空间:
  • 基础表压缩 (Basic Table Compression)​
  • 原理:在数据块级别消除重复值,仅对直接路径插入(如INSERT /*+ APPEND */)有效
  • 适用场景:数据仓库批量加载
  • 高级行压缩 (Advanced Row Compression)​
  • 原理:使用智能字典算法实时压缩所有DML操作
  • 优势:OLTP场景友好,压缩率高达2-4倍
  • 混合列压缩 (Hybrid Columnar Compression, HCC)​
  • 原理:结合行/列存储优势,按列组织相似数据
  • 级别:
    • QUERY LOW:平衡性能与压缩
    • ARCHIVE HIGH:最高压缩比(10x+)
  • 存储层级压缩 (Storage Tiering)​
  • 原理:基于数据冷热自动切换压缩级别

各个步骤示例:

  • CREATE TABLE sales COMPRESS BASIC AS SELECT * FROM raw_data;
    
    ALTER TABLE orders ROW STORE COMPRESS ADVANCED;
    
    CREATE TABLE logs COLUMN STORE COMPRESS FOR ARCHIVE HIGH;
    
    ALTER TABLE orders ILM ADD POLICY 
      COLUMN STORE COMPRESS FOR QUERY AFTER 30 DAYS OF NO MODIFICATION;




    四、压缩功能实操脚本

    SQL验证

    也使用在建表时候用sqldeveloper图形化选择具体列的压缩选项

-- 创建OLTP压缩表
CREATE TABLE customer_orders_oltp (
    order_id NUMBER PRIMARY KEY,
    cust_id NUMBER NOT NULL,
    order_date DATE DEFAULT SYSDATE,
    order_desc VARCHAR2(2000)
) COMPRESS FOR OLTP;

-- 插入10万条测试数据
INSERT /*+ APPEND */ INTO customer_orders_oltp
SELECT 
    ROWNUM, 
    MOD(ROWNUM,1000), 
    SYSDATE - MOD(ROWNUM,365),
    RPAD('ORDER',1000,'*')
FROM dual CONNECT BY LEVEL <= 100000;

COMMIT;

-- 验证压缩效果
SELECT 
    table_name,
    compression,
    compress_for,
    blocks AS compressed_blocks
FROM user_tables
WHERE table_name = 'CUSTOMER_ORDERS_OLTP';
--
TABLE_NAME              COMPRESSION    COMPRESS_FOR       COMPRESSED_BLOCKS
_______________________ ______________ _______________ ____________________
CUSTOMER_ORDERS_OLTP    ENABLED        ADVANCED

CUSTOMER_ORDERS_OLTP
ENABLED  ADVANCED
-- 对比未压缩表
CREATE TABLE customer_orders_nocomp
  NOCOMPRESS
  AS
   SELECT * FROM customer_orders_oltp WHERE 1=0;

INSERT /*+ APPEND */ INTO customer_orders_nocomp
SELECT * FROM customer_orders_oltp;

SELECT blocks AS nocomp_blocks 
FROM user_tables 
WHERE table_name = 'CUSTOMER_ORDERS_NOCOMP';
   NOCOMP_BLOCKS
________________

-- 收集统计信息
EXEC DBMS_STATS.GATHER_TABLE_STATS(USER, 'CUSTOMER_ORDERS_OLTP');
EXEC DBMS_STATS.GATHER_TABLE_STATS(USER, 'CUSTOMER_ORDERS_NOCOMP');
-- 预期结果:
-- OLTP压缩表:COMPRESSION='ENABLED', COMPRESS_FOR='ADVANCED'
-- 非压缩表:COMPRESSION='DISABLED'
-- 查询压缩信息和块数
SELECT 
    table_name,
    compression,
    compress_for,
    blocks AS compressed_blocks
FROM user_tables
WHERE table_name IN ('CUSTOMER_ORDERS_OLTP', 'CUSTOMER_ORDERS_NOCOMP');

TABLE_NAME                COMPRESSION    COMPRESS_FOR       COMPRESSED_BLOCKS
_________________________ ______________ _______________ ____________________
CUSTOMER_ORDERS_NOCOMP    DISABLED                                      14286
CUSTOMER_ORDERS_OLTP      ENABLED        ADVANCED                         369
 压缩组合使用
--更新测试
-- 测试OLTP压缩表更新
UPDATE customer_orders_oltp 
SET order_desc = 'UPDATED_'||order_desc 
WHERE order_id BETWEEN 10000 AND 10100;

-- 分区表压缩策略模板
CREATE TABLE tiered_storage (
  id NUMBER,
  create_date DATE,
  data BLOB
)
PARTITION BY RANGE (create_date) (
  PARTITION p_current VALUES LESS THAN (TO_DATE('2024-01-01','YYYY-MM-DD')) 
     COMPRESS FOR OLTP,
     
  PARTITION p_warm VALUES LESS THAN (TO_DATE('2023-01-01','YYYY-MM-DD')) 
     COLUMN STORE COMPRESS FOR QUERY HIGH,
     
  PARTITION p_cold VALUES LESS THAN (MAXVALUE) 
     COLUMN STORE COMPRESS FOR ARCHIVE HIGH
);

--压缩操作规范​
--使用在线重定义减少停机
BEGIN
  DBMS_REDEFINITION.START_REDEF_TABLE(
    uname => 'SCOTT',
    orig_table => 'SALES_OLD',
    int_table => 'SALES_NEW'
  );
END;
/
--并行压缩加速
ALTER TABLE sales_data MOVE PARTITION p_2023 
   COMPRESS FOR ARCHIVE HIGH PARALLEL 32;

五、Oracle压缩技术全景图

  • 核心压缩技术对比

类型

适用版本

压缩原理

最佳场景

压缩比

​基础行压缩​

11g+

块内重复值替换

OLTP高频更新

2-4x

​OLTP压缩​

12c+

动态符号表+避免行迁移

OLTP混合负载

3-5x

​HCC查询压缩

11g+

列式存储+压缩单元(CU)

数据仓库查询

6-10x

​HCC归档压缩

11g+

大压缩单元+高效算法

历史数据归档

10-15x

​AI增强HCC​

23ai

机器学习+向量化处理

智能分层存储

15-20x

六、23 ai Improved HCC(需要独立许可)

1. AI智能分层压缩​ 
  • 动态策略​:通过机器学习自动分析数据访问频率,实现压缩策略的动态切换:
    • 热数据​(高频读写):采用OLTP压缩​(3-4倍压缩比),保障事务性能。
    • 冷数据​(低频访问):启用HCC归档压缩​(15倍以上压缩比),最大化存储效率。
    • ​技术实现基于预测编码模型(如线性回归)分析数据模式,仅存储预测误差信息,显著减少冗余。
2. 向量化集成​ 
  • 向量数据类型支持​:新增VECTOR原生数据类型,支持将非结构化数据(文档、图像)编码为向量后直接存入HCC压缩单元。
  • 免解压向量搜索​:通过VECTOR_DISTANCE()等运算符在压缩状态下执行相似性搜索,避免解压带来的CPU开销,查询速度提升10倍以上。
  • 与业务数据联合查询​:支持在单一SQL中同时检索向量数据(语义匹配)和结构化业务数据(如价格、库存),实现混合过滤
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值