Oracle Table Compression 详解

Oracle Table Compression 详解

适用版本:Oracle Database 10g / 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07


1. 概述

表压缩减少存储空间[1]:

详细见:Oracle Advanced Compression 详解Oracle 数据块结构与 PCTFREE PCTUSED


2. 压缩类型

2.1 Basic

- 直接路径
- 10g+
- 压缩比 2-4x

2.2 OLTP

- 所有操作
- 11g+
- Advanced Compression

2.3 Warehouse

- 仓库
- Exadata HCC
- 压缩比 3-5x

2.4 Archive

- 归档
- Exadata HCC
- 压缩比 10-20x

3. 创建

3.1 创建时

CREATE TABLE emp (
  id NUMBER,
  name VARCHAR2(100)
) COMPRESS FOR OLTP;

3.2 修改

ALTER TABLE emp COMPRESS FOR OLTP;
ALTER TABLE emp MOVE COMPRESS FOR OLTP;
ALTER TABLE emp MOVE COMPRESS FOR OLTP ONLINE;

3.3 分区

ALTER TABLE sales MODIFY PARTITION p2025_01 
  COMPRESS FOR OLTP;

4. 原理

4.1 符号表

- 重复值
- 符号
- 引用

4.2 块级

- 块内压缩
- 独立
- 不跨块

4.3 OLTP

- 直接路径 + DML
- 自动
- 控制

5. 参数

5.1 COMPRESS

COMPRESS
COMPRESS BASIC
COMPRESS FOR OLTP
COMPRESS FOR QUERY
COMPRESS FOR ARCHIVE

5.2 PCTFREE

- 压缩块 PCTFREE 0
- 建议
- DML

6. 查看

6.1 视图

SELECT table_name, compression, compress_for
FROM user_tables;

SELECT table_name, partition_name, compression, compress_for
FROM user_tab_partitions;

6.2 大小

SELECT segment_name, bytes/1024/1024 AS mb
FROM user_segments;

7. 性能

7.1 优势

- I/O 减少
- Buffer Cache
- 网络

7.2 开销

- CPU
- DML
- 监控

7.3 平衡

- I/O 受限:好
- CPU 受限:评估
- 监控

8. 压缩比

8.1 计算

-- 压缩前
SELECT SUM(bytes) FROM user_segments WHERE segment_name = 'EMP';

-- 压缩后
SELECT SUM(bytes) FROM user_segments WHERE segment_name = 'EMP';

8.2 估算

- Basic:2-4x
- OLTP:2-4x
- Query:3-5x
- Archive:10-20x

9. 应用场景

9.1 OLTP

- FOR OLTP
- DML
- 节省

9.2 仓库

- FOR QUERY
- 大表
- 性能

9.3 归档

- FOR ARCHIVE
- 历史
- 节省

10. 监控

10.1 压缩

SELECT table_name, compression, compress_for, num_rows, blocks
FROM user_tables
WHERE compression = 'ENABLED';

10.2 性能

SELECT name, value FROM v$sysstat 
WHERE name LIKE '%compress%';

11. 常见问题

11.1 DML 慢

- OLTP 压缩
- CPU
- 监控

11.2 压缩比低

- 数据类型
- 评估

11.3 重新压缩

- MOVE
- ONLINE
- 监控

12. 最佳实践

  1. OLTP:FOR OLTP
  2. 仓库:FOR QUERY
  3. 归档:FOR ARCHIVE
  4. MOVE ONLINE:生产
  5. 监控:CPU/IO
  6. 测试:性能
  7. PCTFREE:调整
  8. 分区:按需
  9. 文档:配置
  10. 演练:定期

13. 参考资料

[1] Oracle Database Administrator’s Guide 19c, “Table Compression” https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/