Offloading 与 smart scan
Offloading
Offloading 是指将原来由数据进行的处理过程转移 到 存储层来完成;
在exadata中能够offloading的内容主要包含以下方面
Column projection:
在exadata 的数据库层和存储之间的传递的数据能够只返回相关列的数据;是不是和现在很火的列存储相像啊;这样就可以提升很大的性能;
Predicate Filtering
整个功能是指在返回数据时指返回 相关的行;要知道在普通oracle中查询返回结果时最少是读取一个block的;
Simple Joins (Bloom Filters)
首先说下什么是bloom filters,它是一种算法,简单说就是为了提升查询速率;
在1970由burton H.BLOOM 开发;
Bloom filter 是一种数据结构用来支持成员关系查询,就是用来测试一个元素不是不一个给定集合的成员;
举例如下:
如图所示
K是独立的hash 函数,返回值是1到m之间;R为返回值;
Bloom filter 是一个m bit的数组,初始为0
当r是处于 1到m之间时,就将第R bit 设置为1;否则为0;
Function offloading
在oracle 将单行函数放入了存储层
对于 多行函数,其可能返回一行也可能返回多行;因此它们没有被offload;
但是对于其他函数如decode等是在某些情况下可以offload;
通过视图:V$SQLFN_METADATA 可以查询哪些是可以offload的
压缩与解压缩
Exadata 一个十分引人注意的功能就是 hybrid columnar compression(HCC);
所有的压缩是在database tier 完成的;
但是当访问数据时:
如果是进行的smart scan,那么在进扫描时会在storage cell 中解压缩,并且解压缩的是需要访问的列,返回的数据全部是需要的数据,而不再需要过滤;
如果进行的是非smart scan,那么数据的解压缩就是在database tier 完成的;
加密与解密
原理和HCC类似,加密总是在database tier完成;
Smart scan 是在存储层解密,否则是在数据库层解密;
虚拟列
类似与伪列,用来存放生成的计算结果,但是这些值并不真正的存放,而是被访问是生成,所以当是 smart can 这些计算offload;
Data Mining Model Scoring
可以查询视图v$sqlfn_metadata;
Smart scan
Smart scan是指oracle会对数据在存储层中进行预过滤从而不必向数据库层返回大量数据,并直接将数据放入 pga中;但是 smart scan 能够选择将整个block 返回到sga中;
Smart scan 并不是对每次查询都生效,如果要进行smart scan就必须满足三个基本条件:
---必须是对一个对象的全部扫描
---必须使用 direct path read 机制
---对象必须存储在exadata storage
以上只是前提,在某些情况下即使满足这些条件也不会执行 smart scan
在如下情况下,oracle将不会执行smart scan:
--- cluster table
--- index organized table
---启用了 rowdependence 的表
同时对于发生了 row chained 的数据也将无法进行smart scan
如何确定发生smart scan
Dbms_explan 并不能够直接显示是否进行了smart scan;通过以下方式可以进行查看:
10046 事件;
性能统计信息,如:V$SESSSTAT 、V$ACTIVE_SESSION_HISTORY.
通过视图 v$sql 的IO_CELL_OFFLOAD_ELIGIBLE_BYTES列;
通过REPORT_SQL_MONITOR 存储过程
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25656398/viewspace-709676/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/25656398/viewspace-709676/