ORACLE - 解释计划中的 STORAGE 意味着什么?

vsc*_*der 7 sql oracle performance oracle11g

我正在查看慢查询的解释计划,我注意到在一个数据库中它具有 TABLE ACCESS FULL 但在另一个数据库中完全相同的查询返回 TABLE ACCESS STORAGE FULL。ORACLE 文档/网站和我的网络搜索对于理解短语 STORAGE 的含义没有帮助。

有谁知道在这种情况下 STORAGE 是什么意思?

我已经重新设计了查询,以便它可以使用索引,40 秒到 1 以下,所以这不是问题,只是好奇 STORAGE 告诉我什么?也许与ASM有关?

Jef*_*emp 6

它指的是 Exadata 的智能扫描和单元卸载功能 - 计划的一部分被传递到执行该部分查询的存储层。


小智 5

在 Exadata 中,Oracle 服务器分为两部分,(1) 数据库服务器和 (2) 存储服务器,通过 40 Gb/秒 Infini Band 结构连接。

使用 Exadata,带过滤器的全表扫描的处理方式不同。假设下面的 SQL 将用于全表扫描。

SELECT <columns> FROM <Table> WHERE <Filter on Col1>;
Run Code Online (Sandbox Code Playgroud)

数据库服务器将处理卸载到存储服务器。假设这是第一次访问表,存储服务器在表的列 Col1 上创建区域索引。

区域索引:该区域索引考虑以 1 MB 块的形式存储在 Exadata 磁盘/单元上的数据。对于每个 1 MB 块,对于所需的列,获取并存储最小值和最大值。此类区域索引的集合,称为存储索引,给出了过滤器列的最小值和最大值列表。在扫描 Exadata 单元时,使用这样的索引,使用选择性过滤器的后续查询会跳过大量不相关的数据区域。存储索引最多允许有 8 或 9 列。存储索引使使用相同列子集的过滤器对重复查询进行全表扫描的速度要快得多。

这是执行计划中关键字STORAGE背后的简单故事。有关详细说明,请查看以下链接。

http://kerryosborne.oracle-guy.com/2010/08/oracle-exadata-storage-indexes/