Oracle动态采样详解(三)

2014-11-24 17:28:20 · 作者: · 浏览: 2
含满足Level 2定义的所有表,同时包括,那些谓词有可能潜在地需要动态采样的表,这些动态采样的数据块为默认数据块,对没有分析的表,动态采样的默认块为默认数据块的2倍, 即64个 。
Level 4:采样的表包含满足Level 3定义的表,同时还包括一些表,他们包含一个单表的谓词会引用另外的2个列或者更多的列;采样的块数是动态采样默认数据块数;对没有分析的表,动态采样的数据块为默认数据块的2倍。
Level 5,6,7,8,9:采样的表包含满足Level 4定义的表,同时分别使用动态采样默认数据块的2,4,8,32,128 倍的数量来做动态分析。
Level 10:采样的表包含满足Level 9定义的所有表,同时对表的所有数据进行动态采样。
采样的数据块越多,得到的分析数据就越接近与真实,但同时伴随着资源消耗的也越大。
什么时候使用动态采样
尽管看到动态采样的优点,但是它的缺点也是显而易见,否则Oracle一定会一直使用动态采样来取代数据分析:
1、 在OLAP或者数据仓库环境下,SQL执行消耗的资源要远远大于SQL解析,那么让解析在消耗多一点资源做一些动态采样分析,从而做出一个最优的执行计划是非常值得的。 实际上在这样的环境中,硬分析消耗的资源几乎是可以忽略的。但是 采样的数据块有限,对于海量数据的表,结果难免有偏差。 所以一般在OLAP 或者数据仓库环境中,将动态采样的level 设置为3或者4比较好 。
2、 动态采样需要额外的消耗数据库资源,所以,如果 SQL被反复执行,变量被绑定,硬分析很少,在这样一个环境中,是不宜使用动态采样的。 动态采样发生在硬分析时,如果很少有硬分析发生,动态采样的意义就不大。 当然如果没有使用绑定变量,导致频繁进行硬解析和动态采样消耗过多资源也是不可行的,故OLTP系统非常不适宜使用动态采样