Oracle 12c In-Memory Column Store 详解

Oracle 12c In-Memory Column Store 详解

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


1. 概述

In-Memory Column Store(IMCS)是 Oracle 12.1.0.2 引入的双格式存储[1]:

详细见:Oracle Buffer Cache 工作原理详解Oracle SGA 各组件作用与配置


2. 双格式存储

2.1 行格式

- 传统 Buffer Cache
- OLTP 优化
- 单行操作快

2.2 列格式

- IMCS
- 分析优化
- 列扫描快
- 压缩

2.3 共存

- 同时存在
- 优化器选择
- 透明

3. 配置

3.1 内存

ALTER SYSTEM SET inmemory_size = 4G SCOPE=SPFILE;
-- 需要重启
SHUTDOWN IMMEDIATE;
STARTUP;

3.2 表

ALTER TABLE sales INMEMORY;
ALTER TABLE sales INMEMORY MEMCOMPRESS FOR QUERY HIGH;
ALTER TABLE sales INMEMORY PRIORITY CRITICAL;

3.3 列

ALTER TABLE sales INMEMORY 
  INMEMORY (id, sale_date, amount)
  NO INMEMORY (description);

4. 压缩

4.1 级别

- NO MEMCOMPRESS:不压缩
- MEMCOMPRESS FOR DML:DML 优化
- MEMCOMPRESS FOR QUERY LOW:默认
- MEMCOMPRESS FOR QUERY HIGH:高压缩
- MEMCOMPRESS FOR CAPACITY LOW
- MEMCOMPRESS FOR CAPACITY HIGH

4.2 选择

- DML:DML 频繁
- QUERY LOW:默认
- QUERY HIGH:分析
- CAPACITY HIGH:节省空间

5. 优先级

5.1 级别

- LOW
- MEDIUM
- HIGH
- CRITICAL
- NONE(默认)

5.2 加载

- 启动时加载(CRITICAL/HIGH)
- 访问时加载(NONE)

6. Population

6.1 加载

- 启动时
- 访问时
- 后台进程

6.2 查看

SELECT segment_name, bytes_in_mem, bytes, populate_status
FROM v$im_segments;

SELECT * FROM v$inmemory_area;

7. IM FastStart

7.1 作用

- IM 数据持久化
- 重启快速加载
- 减少 population 时间

7.2 配置

ALTER SYSTEM SET inmemory_faststart = 'IMFS_TABLESPACE';

8. 查询

8.1 优化器

- 自动选择 IMCS
- 列扫描
- 避免 Buffer Cache

8.2 执行计划

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR());
-- TABLE ACCESS INMEMORY FULL

8.3 In-Memory Aggregation

- VECTOR GROUP BY
- 12c+
- 聚合加速

9. 应用场景

9.1 分析

- 数据仓库
- 大表扫描
- 聚合
- 加速

9.2 混合

- OLTP + OLAP
- 行 + 列
- 双格式

9.3 报表

- 复杂报表
- 列扫描
- 性能

10. 性能

10.1 优势

- 列扫描快
- 压缩
- SIMD
- 缓存友好

10.2 监控

SELECT name, value FROM v$inmemory_area;
SELECT * FROM v$im_segments;

10.3 统计

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

11. 限制

11.1 内存

- SGA 一部分
- 足够内存
- 监控

11.2 不支持

- 部分数据类型
- 外部表
- 临时表

12. 常见问题

12.1 未使用

- 未 populate
- 检查
- 等待

12.2 内存

- SGA 不足
- 调整

12.3 DML

- DML 开销
- 压缩级别
- DML

13. 最佳实践

  1. 分析场景:使用
  2. 内存:足够
  3. 压缩:场景
  4. 优先级:关键表
  5. FastStart:持久化
  6. 监控:使用
  7. 测试:性能
  8. DML:评估
  9. 文档:配置
  10. 演练:定期

14. 参考资料

[1] Oracle Database In-Memory Guide 19c https://docs.oracle.com/en/database/oracle/oracle-database/19/inmem/