oracle教程之oracle动态采样(二)
原创
©著作权归作者所有:来自51CTO博客作者Oracle小混子的原创作品,请联系作者获取转载授权,否则将追究法律责任
2、动态采样的级别
Oracle 为动态采样划分了11个级别,在Oracle 的官网上详细的介绍。
13.5.7.4 Dynamic Sampling Levels
http://download.oracle.com/docs/cd/E11882_01/server.112/e10821/stats.htm#PFGRF94760
(1)Level 0
不做动态分析
(2)Level 1
Oracle 对没有分析的表进行动态采样,但需要同时满足以下4个条件。
(a)SQL中至少有一个未分析的表
(b)未分析的表出现在关联查询或者子查询中
(c)未分析的表没有索引
(d)未分析的表占用的数据块要大于动态采样默认的数据块(32个)
(3) Level 2
对所有的未分析表做分析,动态采样的数据块是默认数据块的2倍。
(4)Level 3
采样的表包含满足Level 2定义的所有表,同时包括,那些谓词有可能潜在地需要动态采样的表,这些动态采样的数据块为默认数据块,对没有分析的表,动态采样的默认块为默认数据块的2倍。
(5)Level 4
采样的表包含满足Level 3定义的表,同时还包括一些表,他们包含一个单表的谓词会引用另外的2个列或者更多的列;采样的块数是动态采样默认数据块数;对没有分析的表,动态采样的数据块为默认数据块的2倍。
(6) Level 5,6,7,8,9
采样的表包含满足Level 4定义的表,同时分别使用动态采样默认数据块的2,4,8,32,128 倍的数量来做动态分析。
(7)Level 10
采样的表包含满足Level 9定义的所有表,同时对表的所有数据进行动态采样。
采样的数据块越多,得到的分析数据就越接近与真实,但同时伴随着资源消耗的也越大。
3、什么时候使用动态采样
动态采样也需要额外的消耗数据库资源,所以,如果 SQL 被反复执行,变量被绑定,硬分析很少,在这样一个环境中,是不宜使用动态采样的,就像OLTP系统。 动态采样发生在硬分析时,如果很少有硬分析发生,动态采样的意义就不大。
而在OLAP或者数据仓库环境下,SQL执行消耗的资源要远远大于SQL解析,那么让解析在消耗多一点资源做一些动态采样分析,从而做出一个最优的执行计划是非常值得的。 实际上在这样的环境中,硬分析消耗的资源几乎是可以忽略的。
所以,一般在OLAP 或者数据仓库环境中,将动态采样的level 设置为3或者4 比较好。 相反,在OLTP系统下,不应该使用动态采样。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章