Oracle Exadata:数据库一体机的秘密
你有没有听说过:
Exadata 是 Oracle 的数据库一体机。
同样的 SQL,在 Exadata 上快了几十倍。
Smart Scan、Storage Index、Hybrid Columnar Compression……
今天,揭开 Exadata 的神秘面纱。
Exadata 是什么?
Exadata 是 Oracle 与 Intel/Huawei 合作开发的数据库一体机,将软件和硬件深度整合,提供极致的数据库性能。
Exadata X9M 架构:
┌─────────────────────────────────────────────────────────────────┐
│ Exadata Storage │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ Storage Server Grid │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ Storage Cell│ │ Storage Cell│ │ Storage Cell│ │ │
│ │ │ (存储节点) │ │ (存储节点) │ │ (存储节点) │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ │ ┌─────────────────────────────────────────────────┐ │ │
│ │ │ Smart Flash Cache (闪存缓存) │ │ │
│ │ └─────────────────────────────────────────────────┘ │ │
│ └───────────────────────────────────────────────────────────┘ │
│ │ │
│ ┌──────────────┼──────────────┐ │
│ ▼ ▼ ▼ │
│ InfiniBand / RoCE Network (高速互联) │
│ │ │
└─────────────────────────────────────────────────────────────────┘
│
┌─────────────────────────────────────────────────────────────────┐
│ Database Server │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ 数据库集群 │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ DB Server │ │ DB Server │ │ DB Server │ │ │
│ │ │ (数据库节点)│ │ (数据库节点)│ │ (数据库节点)│ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ └───────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘Exadata 的核心优势
| 优势 | 说明 |
|---|---|
| Smart Scan | 存储层过滤,减少数据传输 |
| Storage Index | 自动索引,大幅减少 I/O |
| Flash Cache | 智能闪存缓存,热数据加速 |
| HCC | 混合列压缩,压缩率 10-50x |
| InfiniBand | 高速网络,减少网络延迟 |
| IO Resource Manager | I/O 资源管理,保证 QoS |
Smart Scan(智能扫描)
传统架构 vs Smart Scan
传统架构:
数据库 ──────► 存储 ──────► 传输全部数据块 ──────► 数据库
│
▼
传输大量无用数据
Smart Scan:
数据库 ──────► 存储(智能过滤)────► 只传需要的列/行 ──────► 数据库
│
▼
只传输需要的数据Smart Scan 的能力
| 能力 | 说明 |
|---|---|
| 列过滤 | 只读取需要的列 |
| 行过滤 | 只读取符合条件的行 |
| 谓词下推 | 在存储层执行 WHERE 条件 |
| 投影下推 | 在存储层执行 SELECT 列 |
| Join 过滤 | 减少 join 数据量 |
Smart Scan 使用条件
sql
-- Smart Scan 触发条件
-- 1. 使用直接路径读取(大表扫描)
SELECT * FROM large_table WHERE ...;
-- 2. 表必须存储在 Exadata 存储上
-- 3. 不能有某些存储限制
-- 查看 SQL 是否使用 Smart Scan
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(FORMAT => '+predicate'));
-- 查看执行计划中是否有 "Storage"Storage Index(存储索引)
Storage Index 原理
Storage Index 自动维护每个数据块的最小/最大值:
数据块 1:column_value 1-1000 ───► Storage Index 记录 [1, 1000]
数据块 2:column_value 1001-2000 ───► Storage Index 记录 [1001, 2000]
数据块 3:column_value 2001-3000 ───► Storage Index 记录 [2001, 3000]
查询:WHERE column_value = 2500
↓
检查 Storage Index:2500 不在 [1, 1000],[1001, 2000] 中
↓
跳过数据块 1、2,只读取数据块 3Storage Index 特性
| 特性 | 说明 |
|---|---|
| 自动创建 | 无需人工干预 |
| 自动维护 | DML 操作时自动更新 |
| 自动使用 | 优化器自动决定是否使用 |
| 多列支持 | 支持多列索引 |
sql
-- Storage Index 对特定查询自动生效
SELECT * FROM sales WHERE customer_id = 12345;
SELECT * FROM sales WHERE sale_date BETWEEN '2024-01-01' AND '2024-01-31';Flash Cache(闪存缓存)
Exadata 智能闪存
数据分层:
热数据 ──────────────────► Flash Cache (NVMe SSD)
│
温数据 ──────────────────► Storage Cell Disk
│
冷数据 ──────────────────► Archive DiskFlash Cache 特性
| 特性 | 说明 |
|---|---|
| 智能缓存 | 自动缓存热数据 |
| 写缓存 | 写操作先写入 Flash,再异步落盘 |
| 懒读取 | 第一次读取慢,后续读取从 Flash |
| 压缩闪存 | 支持 HCC 压缩数据缓存 |
bash
# 查看 Flash Cache 使用情况
SELECT * FROM V$SYSMETRIC
WHERE METRIC_NAME LIKE '%Flash%';
# 查看闪存命中率
SELECT * FROM V$INSTANCE_CACHE_TRANSFER;Hybrid Columnar Compression(混合列压缩)
HCC 是什么?
HCC 是 Exadata 特有的压缩技术,按列组织数据而非按行:
行式存储:
[行1: col1, col2, col3]
[行2: col1, col2, col3]
[行3: col1, col2, col3]
列式存储(内存中):
[col1: 行1, 行2, 行3]
[col2: 行1, 行2, 行3]
[col3: 行1, 行2, 行3]
相同值在一起,压缩率更高!HCC 压缩级别
| 压缩级别 | 压缩率 | 适用场景 |
|---|---|---|
| FOR QUERY LOW | 2-4x | 频繁查询 |
| FOR QUERY HIGH | 6-10x | 报表分析 |
| FOR ARCHIVE LOW | 6-10x | 冷数据 |
| FOR ARCHIVE HIGH | 10-15x | 归档数据 |
HCC 使用示例
sql
-- 创建 HCC 压缩表
CREATE TABLE warehouse_data (
sensor_id NUMBER,
reading_value NUMBER,
reading_date DATE
)
COMPRESS FOR QUERY HIGH;
-- 移动现有表到 HCC
ALTER TABLE big_archive MOVE COMPRESS FOR ARCHIVE HIGH;
-- 验证压缩效果
SELECT table_name, compression, compress_for, num_rows
FROM user_tables
WHERE table_name = 'WAREHOUSE_DATA';IO Resource Manager(I/O 资源管理)
IORM 是什么?
IORM 管理不同数据库和进程的 I/O 资源,保证服务质量:
IORM 配置:
┌─────────────────────────────────────────────────┐
│ I/O 请求 │
│ ┌─────────────────────────────────────────┐ │
│ │ Plan (资源计划) │ │
│ │ ┌─────────────────────────────────────┐│ │
│ │ │ DB1 (关键业务) ────► 50% I/O ││ │
│ │ │ DB2 (报表系统) ────► 30% I/O ││ │
│ │ │ DB3 (测试环境) ────► 20% I/O ││ │
│ │ └─────────────────────────────────────┘│ │
│ └─────────────────────────────────────────┘ │
└─────────────────────────────────────────────────┘IORM 配置
bash
# 查看当前 IORM 配置
cellcli -e list iormplan
# 配置 IORM
cellcli -e CREATE IORMPLAN "
name = 'mydb'
dbPlan = '((category="OLTP", limit=50),
(category="BATCH", limit=30),
(category="OTHER", limit=20))'
"Exadata 监控
关键指标
bash
# 查看存储指标
cellcli -e LIST METRICDEFINITIONS
cellcli -e LIST METRICCURRENT
# 查看 I/O 统计
cellcli -e LIST IOTHROTTLEHISTORY
# 查看 Smart Scan 统计
cellcli -e LIST ACTIVEREQUEST
# 查看闪存缓存统计
cellcli -e LIST FLASHCACHEACTIVITY性能诊断
sql
-- 查看 Exadata 特定统计
SELECT * FROM V$MYSTAT
WHERE NAME LIKE '%cell%';
-- 查看存储节点统计
SELECT * FROM V$SEGSTAT
WHERE NAME LIKE '%flash%';
-- 查看 I/O 延迟分布
SELECT * FROM V$IOSTAT_DETAIL;Exadata vs 普通存储
| 特性 | 普通存储 | Exadata |
|---|---|---|
| Smart Scan | 不支持 | 支持 |
| Storage Index | 不支持 | 支持 |
| Flash Cache | 无 | 有 |
| HCC | 不支持 | 支持 |
| IORM | 无 | 支持 |
| 网络 | 1/10 GbE | 100 GbE InfiniBand |
| 数据传输 | 传整个数据块 | 只传需要的列/行 |
面试高频问题
Q1: Smart Scan 是什么?
Smart Scan 是 Exadata 存储层的数据过滤技术,在存储层执行列过滤和行过滤,只将需要的数据传输到数据库服务器,减少网络传输量。
Q2: Storage Index 有什么用?
Storage Index 自动维护每个数据块的数据范围,快速跳过不包含查询条件的数据块,大幅减少 I/O 操作。
Q3: HCC 和普通压缩的区别?
HCC(混合列压缩)按列组织数据存储,相同值相邻,压缩率比普通行式压缩高很多(6-50x),适合分析型查询和冷数据存储。
总结
Exadata 是数据库一体机的标杆:
| 特性 | 效果 |
|---|---|
| Smart Scan | 减少 80%+ 数据传输 |
| Storage Index | 减少 90%+ I/O |
| Flash Cache | 10x 读取加速 |
| HCC | 10-50x 存储节省 |
| IORM | 保证 QoS |
Exadata 让大型数据库的性能达到新的高度。
下一步
- Oracle RAC:集群架构
- Oracle ASM:自动存储管理
