Exadata存储索引不工作的可能场景

个人简介:石云华,Exadata中国用户组联合创始人,2019年被ORACLE官方授予ACE称号。毕业后一直从事Oracle数据库第三方运维服务工作,拥有十余年电信运营商、保险、税务、电力行业核心系统数据库运维经验。现就职于北京海天起点技术服务股份有限公司,oracle数据库专家组成员,Exadata部门负责人。个人著作有《Exadata实施运维指南》,另外一本《Oracle Exadata性能优化》即将面世。

Exadata中的存储索引由存储软件自身进行维护,运维人员基本上无法管理和维护存储索引,所以存储索引特性不工作的情况会非常少,下面列举几种最常见的引发存储索引不工作的原因。

_kcfis_storageidx_disabled参数

数据库隐含参数_kcfis_storageidx_disabled控制着存储索引特性是否生效,默认值为FALSE,表明开启存储索引特性;如果将该隐含参数设置为TRUE,则表明禁止存储索引特性,可通过命令查询会话级别或实例级别是否禁止了存储索引特性,具体命令见代码清单2.6

代码清单2.6 数据库隐含参数_kcfis_storageidx_disabled

注意:设置_kcfis_storageidx_disabled隐含参数为TRUE仅仅是禁止数据库层面使用存储索引特性,这并不影响存储节点继续自动维护和管理存储节点内存中的存储索引条目。

  _smu_debug_mode参数

Oracle11g中为了增强延迟块清除操作,从而引入了min active scn这个新特性,但这个新特性带来了最明显的一个缺陷就是会向MMON进程的trace文件中写入大量的日志,为了解决这个缺陷,ORACLE官方给出的解决方案是可以临时关闭该特性。关闭该特性的具体命令如下。

修改完该隐含参数后,重启数据库生效。

但在某些情况下,修改完该隐含参数也许还是不能关闭该特性,此时需要设置_smu_debug_mode隐含参数,具体命令如下。

修改完该隐含参数后,重启数据库生效。

在传统架构的Oracle数据库中,关闭min active scn这个新特性没有任何问题,但在Exadata架构中,关闭该特性将导致存储索引特性失效,因为关闭该特性后,导致min active scn无法传递到存储节点,而存储节点会将min active scn设置成0,从而会出现存储索引的regionLastChangeScn大于数据库的min active scn的情况,然而存储索引工作的条件是存储索引的regionLastChangeScn必须小于数据库的min active scn

长事务

在讲_smu_debug_mode隐含参数时,已经提及存储索引工作的条件是存储索引的regionLastChangeScn必须小于数据库的min active scn。如果数据库中存在长事务,则会导致数据库的min active scn长时间不会发生变化,渐渐偏离数据库当前的scn,存储索引使用逐渐减少,间接地阻止了存储索引的正常工作。

这里其实同样存在一个问题,那就是到底多长的事务算是长事务,ORACLE官方也没有给出明确的答复,只是认为运行时间超过几天的事务都需要关注。因此,最好的方法是定期监视gv$transaction视图,并确保不存在孤立或者废弃的事务。

后述会单独拿出一个典型的案例来论述长事务对存储索引特性的影响。

存储索引超过8个字段

存储软件版本在12.2.1.1.0之前,存储索引特性最多只支持8个字段,也即同一张表最多只允许该表上的8个不同字段在存储节点的内存中缓存存储索引信息。下面通过示例来进行验证,具体见代码清单2.7

代码清单2.7 存储索引最多支持的8个字段

创建一张测试表bb表上有10个字段,并插入大量测试数据。接着以不同的字段作为过滤条件(where)来访问测试表b,目的是为了存储节点能够对测试表b的不同字段上维护存储索引。同时,我们获知该测试表的data_object_id13923

此刻,将存储节点内存中存储索引的信息打印出来。

以上内容为打印出来的存储索引信息的一小部分内容,从以上内容可以看出,data_object_id13923的对象存储索引中已经缓存了8个字段的信息。

此时,我们继续访问测试表b的第10个字段,然后再次将存储索引的信息打印出来,看看发生了哪些变化。

可以看出,存储索引中仍然只缓存了8个字段的信息,但是我们可以发现以前缓存的第3个字段的信息已经不存在,而刚刚访问的第10个字段的信息进入了存储索引中。这说明旧版本的存储软件最多只能缓存8个字段的存储索引信息,新的字段进入存储索引缓存之前,必须先挤出以前的一部分信息。

注意:存储软件版本从12.2.1.1.0开始,存储索引的特性有所增强,目前最大可以支持24个字段。

未经允许不得转载:Oracle一体机用户组 » Exadata存储索引不工作的可能场景

相关推荐