重庆oracle认证培训机构

新闻分类

产品分类

热门关键词

联系我们

企业名称:重庆赛烽达科技有限公司

联系人:程老师

手机:13372708242

邮箱:xqzhang@saifengda.com

网址:www.cqora.com

地址:重庆石桥铺高创锦业17-3

​重庆oracle培训中心分享 exadata存储索引功能

您的当前位置: 首 页 >> 新闻资讯 >> 常见问题

​重庆oracle培训中心分享 exadata存储索引功能

发布日期:2018-09-08 作者: 点击:

重庆oracle培训中心分享 exadata存储索引功能

存储索引功能是在 Exadata 11.2.1.2.0  版本( V2 )上引入的新特性,它

主配合智能扫描 (smart scan) 功能,来消除一个查询所不需要的 IO 请求。它在内

存中保存表数据的汇总信息, 并通过内部机制来控制和访问这些数据结构。 当智

能扫描功能启动时,存储索引像一个黑盒子一样提供强大的功能,给 Exadata

带来显著的性能增强。

随着 Oracle 虚拟化技术不断发展, 存储索引技术也相应有了新的改变。 存

储索引需要支持更多的虚拟地址空间, 这样之前的架构就不能满足日益增长的物

理磁盘空间和虚拟化的需求,因此, Oracle 在 12.1.2.1 新版本中完全改变了技

术架构,让其满足新的需求。这些技术的变化会在第六部分进行介绍。

二、使用条件

在如下情况发生时,系统会使用存储索引 :

1. 查询语句使用智能扫描 (Smart Scan) 。

2. 查询语句中 where 子句至少有一个谓词。

3. 简单的操作符: <, <=, =, !=, >=, >, is NULL, is NOTNULL,between,in 。

4. 支持的数据类型: number, float, date, varchar2 。

5.谓词的值支持数值和绑定变量


如下情况不会使用存储索引 :

1. 不支持 lob 列。

2. 谓词中包括函数。比如用户自定函数或 sysdate().

3. 列上有加密。

也有其它一些情况会使用和不使用存储索引,在这里就不详细说明。

技术架构

技术架构主要是解决存储索引是如果工作的问题。 在这里不会将 Oracle 的

代码拿来讲解并说明这个功能是如何实现的。 只是通过简单的实例说明它是如何

设计的。

存储索引是保存在内存中的数据结构, 它不同与我们常见表数据的 B*tree 索引,

可以通过索引的条目最终定位到我们需要访问的数据。 存储索引的功能是告诉查

询语句哪些

是我们不需要的 IO 请求,这样我们就不需要花费多余的成本在我们不需要的东

西上面。

每 1M 大小的磁盘空间上都会对应一个存储索引的条目,这个条目中维护

着这个区域中最大不超过 8 列的最大值 (MAX)和最小值 (MIN)。如果满足使用存

储索引的查询

语句第一次被执行的时候, Oracle 就会为这个查询中涉及的表构建存储索引。

在语句第二次运行的时候就会使用这个索引。

现有表 Exadata_SI_test, 有 A,B,C 三列,如下图就是一个表和存储索引的

Mapping 关系。

在我们运行查询的时候, cellsrv 进程就会根

据这个查询里的表对象和谓词通

过 hash 算法到内存中寻找存储索引,如果没有找到,则在返回结果集之后,建

立存储索引。当第二次运行的时候, cellserv 发现了已经建立了索引,则直接使

用存储索引来减少 IO 操作。

建立在 A 列上的存储索引类似如下结构:

当使用如下查询的时候, Oracle 就不需要对 ID 为 1 的 1M 区域进行 IO 操作。

select count(*) from Exadata_SI_test where A <= 7;

对于如下查询 ,Oracle 消除了对 ID 为 3 的 1M 区域进行 IO 操作。

select count(*) from Exadata_SI_test where A is not null;

Oracle 通过如下结构来创建和寻找存储索引的条目。每一个 grid disk 会在内存

中建立一个哈希表,每个哈希表会有一个段数组与之对应,

数组里放的是段的信息,根据段就会找到相应的存储索引的具体条目。

监控

目前确实没有很多的手段来监控存储索引, 我们只能通过查询统计信息这种简单

的方式来监控是否使用了存储索引以及它为我们消除了多少不必要的 IO 请求.

会话和系统级别:查询 cell physical IO bytes saved by storage index 的值。

select name, value from v$mystat where name like '%storage%';

select name, value from v$sysstat where name like '%storage%';

另外一种方式是查询 V$SQL 中的 optimized_phy_read_requests 的值。

这个值不但包括存储索引消除的 IO 请求数量 ,还包括了在 Exadata flash cache

缓存的 IO 和数据库级别 L2 flash cache 缓存的 IO 数量。

因此它不能准确表明存储索引消除的 IO 数量。

五、跟踪与控制

可以通过设置参数 _kcfis_storageidx_disabled  来控制是否使用存储索引,如果

SQL 在使用 smart scan 时产生错误的结果集,我们可以通过设置这个参数为 true

来判断是否由于

存储索引的问题引起的。缺省值是 false。

可以在 cell 级别来启用和禁用以及删除存储索引:

alter cell events = "immediate cellsrv.cellsrv_storidx(,disable?, ,ALL?,0, 0, 0) ”;

alter cell events = "immediate cellsrv.cellsrv_storidx(,enable?, ,ALL?, 0,0, 0) ”;

alter cell events = "immediate cellsrv.cellsrv_storidx( ,purge?, ,ALL?, 0,0, 0) ”;

新版本中的变化

在 Exadata 12.1.2.1 版本中的存储索引有了新的特性,它需要支持 spase disk

和 snapshot 数据库,这两个具体概念请参考 12.1.2.1 的官方文档。

以下是存储索引的改变:

1. 固定的内存预算大小

为了支持 1M 的物理地址和虚拟区域地址, 它需要预留之前 16 倍的内存大小

来放置存储索引。它最大使用的内存是 cell 内存的 10%,_cell_max_memory

参数

决定了 cellsrv 最大使用的内存量, _cell_storage_index_max_memory_factor

参数设置为 10, 说明存储索引最大能使用的内存量是 cell 使用最大内存的 10%。

2. 全局哈希表

之前版本的结构是每一个 grid disk 会在内存中建立一个 hash 表, 新版本中是

所有 grid disk 共享一个全局哈希表。

3. Sparse 区域支持

之前是靠偏移量的算法标记磁盘上的 1M 物理空间,新特性支持稀疏 (Sparse)

方式的读取。

4. 踢除操作 (Eviction)

这是一个新的功能, Cellsrv 能够根据存储索引使用负载情况和创建历史,进

行踢除操作,从而释放出更多的空间。

5. 删除(purge)

新版本中的 purge 操作可以针对不同的 offload 组进行删除。

CellCLI> alter cell events = "immediatecellsrv.cellsrv_storidx(purge,<offload

group name> or <ALL>,0, 0,0)"


本文网址:http://www.cqora.com/news/538.html

关键词:重庆oracle培训,重庆oracleocp培训,甲骨文oracle认证培训机构

最近浏览:

报名咨询

点击咨询报名

赛烽达QQ群

赛烽达技术群

程老师

xxxxxxxxxx

加微信咨询

张老师微信.jpg

xqzhang@saifengda.com