
上QQ阅读APP看书,第一时间看更新
2.2 检测SQL语句是否利用存储索引
可以通过监控v$sysstat或v$mystat视图中的cell physical IO bytes saved by storage index指标值,来评估SQL语句真正节省了多少IO扫描。需要记住,此统计数据在会话的存活期间是累计的。SQL语句执行前查看该指标值,SQL语句执行之后再次查看该指标值,两者的差值即为存储索引特性节省的IO扫描量,单位为字节(B)。具体见代码清单2.1。
代码清单2.1 检测SQL语句是否利用存储索引

从以上示例可以看出,在第一次执行该SQL语句时,cell physical IO bytes saved by storage index指标值为0,也即未能调用存储索引特性,因为存储节点的内存中还没有该表的存储索引信息。当执行完SQL语句后,系统将收集相关的存储索引信息存放在存储节点的物理内存中。当再次执行该SQL语句时,则可以利用存储索引特性来减少物理IO的扫描量。
在以上示例中,存储索引特性此时过滤的数据量非常小,是由于test.test表的offer_spec_param_id列中的数据分布过于分散,如果将该列排序并且重组该表,则存储索引特性的优势就会体现出来。