ORACLE - 解释计划中的存储意味着啥?

Posted

技术标签:

【中文标题】ORACLE - 解释计划中的存储意味着啥?【英文标题】:ORACLE - What does STORAGE in an explain plan signify or mean?ORACLE - 解释计划中的存储意味着什么? 【发布时间】:2020-01-08 14:56:22 【问题描述】:

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

有人知道 STORAGE 在这种情况下的含义吗?

我已经修改了查询,以便它可以利用索引,40 秒到 1 以下,所以这不是问题,只是好奇 STORAGE 告诉我什么?也许与 ASM 相关?

【问题讨论】:

【参考方案1】:

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

【讨论】:

谢谢,这可以解释为什么未优化的查询仍然非常快, kerryosborne.oracle-guy.com/2010/08/…【参考方案2】:

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

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

SELECT <columns> FROM <Table> WHERE <Filter on Col1>;

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

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

这是执行计划中关键字 STORAGE 背后的一个简短故事。详细解释请查看以下链接。

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

【讨论】:

以上是关于ORACLE - 解释计划中的存储意味着啥?的主要内容,如果未能解决你的问题,请参考以下文章

oracle执行计划解释

在 Oracle 11g 中获取实际执行计划

Oracle解释计划解析——Oracle做全表访问

如何在 SQuirrel SQL 中查看 Oracle 执行计划?

SQL执行计划中的BUFFER SORT是啥意思呢,请高手指点

Oracle如何查看执行计划