
2.4 禁用存储索引特性
有时可能会遇到这样的情况,即某条SQL语句的结果集不是预期的结果。如果怀疑是存储索引特性引发的SQL语句给出了错误的结果集,则可以尝试关闭存储索引特性,验证是否该特性导致了错误的结果集。
可以在数据库层面或存储节点层面来完成存储索引特性的启用或禁用。
1.数据库层面禁用存储索引特性
存储索引特性由数据库中的隐含参数_kcfis_storageidx_disabled进行控制,默认值为false,表示开启存储索引特性;设置为true,则关闭存储索引。具体见代码清单2.3。
代码清单2.3 数据库层面开启/关闭存储索引特性

在开启存储索引特性的情况下,该SQL语句节省了40MB的IO扫描量;然后关闭存储索引特性,再次访问该SQL语句,发现cell physical IO bytes saved by storage index指标值未发生变化,说明存储索引特性未起作用。
2.存储节点层面禁用存储索引特性
除了在数据库层面启用和关闭存储索引特性外,还可以在存储节点层面来控制存储索引特性。存储节点启用或关闭存储索引特性的具体语法如下。

下面对cellsrv.cellsrv_storidx函数中的参数进行说明,具体如下。
■ disable:关闭存储索引特性。
■ enable:启用存储索引特性。
■ all|GridDiskName:指定所有的Griddisk或指定明确的Griddisk。
■ objd:对象ID,来自于dba_objects视图中的data_object_id字段。
■ tsn:表空间ID,来自于ts$视图中的ts#字段。
■ dbid:数据库ID,来自于x$ksqdn视图中的ksqdngunid字段。
注意:如果objd、tsn和dbid参数值都设置为0,则表示在指定的Griddisk或所有Griddisk上的所有存储节点都不启用存储索引特性。
在存储节点上控制存储索引特性,具体见代码清单2.4。
代码清单2.4 存储节点层面开启/关闭存储索引特性(1)

某条SQL语句在第一次访问时进行了智能扫描,但由于在存储节点的内存中未包含该SQL语句所涉及的表对象中相关字段的存储索引信息,所以第一次访问时cell physical IO bytes saved by storage index指标值为0。此时,存储节点开始把相关存储索引的信息缓存到存储节点的内存中。第二次访问相同的SQL语句时,cell physical IO bytes saved by storage index指标值不为0,则表示该SQL语句的存储索引特性生效。
代码清单2.4 存储节点层面开启/关闭存储索引特性(2)

此时,在存储节点完成关闭存储索引特性。第三次执行该SQL语句,可以发现cell physical IO bytes saved by storage index指标值未出现增长,这说明第三次执行该SQL语句时,存储索引特性未生效。