什么是Smart Scan?
Smart Scan是Oracle Exadata的核心特性之一,也是Exadata实现高性能的关键黑科技。
它的核心理念是:
让存储层主动参与SQL处理,将数据过滤、投影等工作下推到存储服务器执行,从而大幅减少需要传输到数据库节点的数据量,提升性能。
对比传统存储
在传统数据库架构中:
- 数据库节点从存储设备读取整块数据到内存。
- 在数据库节点内过滤不需要的数据,进行SQL处理。
- 大量无用数据传输,占用带宽,浪费CPU资源。
在Exadata Smart Scan中:
- 数据过滤和部分SQL处理直接在存储服务器(Exadata Storage Server)上执行。
- 只有真正需要的数据才传回数据库服务器。
- 大幅降低数据传输量和数据库服务器负担。
Smart Scan的主要功能
1. Predicate Filtering(谓词过滤)
- SQL中的
WHERE
条件下推到存储服务器。 - 只返回符合条件的行,丢弃不符合条件的数据。
例子:
SELECT * FROM orders WHERE order_status = 'CLOSED';
- 传统方式:读整个表的数据到数据库节点,然后过滤。
- Smart Scan:在存储服务器直接筛选
order_status='CLOSED'
的行,丢掉其他数据,只返回符合条件的行。
2. Column Projection(列投影)
- SQL中的
SELECT
子句所需的列下推到存储层。 - 只返回查询需要的列,而不是整个数据块。
例子:
SELECT order_id, order_date FROM orders;
- 传统方式:读取整个表每行的所有列。
- Smart Scan:只读取并返回
order_id
和order_date
列。
3. Storage Index(存储索引)
- Exadata存储服务器会自动维护存储索引,记录每个存储区域(cell storage region)中:
- 最小值、最大值
- NULL信息
- 读取时,如果谓词条件(WHERE条件)与某个区域的存储索引完全不匹配,Exadata直接跳过该区域。
加速效果:避免无意义的磁盘扫描。
4. Automatic Decompression(智能压缩处理)
- 对于压缩表(Hybrid Columnar Compression,HCC),Smart Scan可以直接在存储层解压并过滤。
- 避免解压整个表块到数据库服务器,只传回符合条件的行。
5. Join Filtering(动态分区剪裁)
- 对于分区表连接,Smart Scan可以根据主表的过滤条件,动态推断并裁剪子表的读取范围。
- 类似“Bloom Filter”的效果,减少扫描数据量。
Smart Scan的核心价值
✅ 减少I/O传输量
✅ 降低数据库服务器CPU负担
✅ 最大化利用存储层的计算能力
✅ 提升OLAP和DSS查询性能
触发条件
Smart Scan的触发条件
- 数据存储在Exadata存储服务器(Cell Storage)。
- 数据表启用了Direct Path Read(直读路径),如:
- 全表扫描(Full Table Scan)
- 全索引扫描(Full Index Scan)
- 并行查询(Parallel Query)
注意:Smart Scan一般不会对基于索引的单行查询(Index Lookup)生效,因为它们走的是buffer cache,无法利用存储层智能处理。
适用场景
Smart Scan特别适合:
- **数据仓库(DWH)**场景。
- 大表全表扫描。
- 复杂报表查询、分析查询。
- ETL场景中大量批量数据操作。
总结
传统存储 | Exadata Smart Scan |
---|---|
数据全部传输到数据库服务器 | 只传输过滤后数据 |
数据过滤在数据库服务器执行 | 数据过滤下推到存储服务器 |
高I/O和高CPU消耗 | 低I/O和低CPU消耗 |
存储设备是无智能设备 | 存储设备参与SQL执行 |
关键点回顾
- 📍 存储层过滤(Predicate Filtering)
- 📍 列投影(Column Projection)
- 📍 存储索引(Storage Index)
- 📍 智能解压(Decompression)
- 📍 动态剪裁(Join Filtering)