Oracle统计信息之动态采样(Dynamic Sampling)

0    107    1

Tags:

👉 本文共约2598个字,系统预计阅读时间或需10分钟。

什么是动态采样(Dynamic Sampling)?

对于没有收集统计信息的表,Oracle为了能够得到相对准确的执行计划,会在执行SQL之前对SQL语句涉及到的表做动态采样(Dynamic Sampling,从Oracle 11.2.0.4开始称之为Dynamic Statistic)。

有两种方法可以开启动态采样:

(1)将参数OPTIMIZER_DYNAMIC_SAMPLING的值设为大于或等于1。从Oracle 10g开始,该值默认为2,若设置为0,则禁用动态采样。

(2)使用动态采样的Hint:DYNAMIC_SAMPLING(T LEVEL)。该Hint表示对目标表T强制使用等级为参数level指定值的动态采样。

默认采样数据块数量受隐含参数“_OPTIMIZER_DYN_SMP_BLKS”的控制,其默认值是32,表示动态采样时默认采样数据块数量为32。

下表针对Oracle 11.2.0.4(对Oracle 10g而言,采样的数据块数量有差异,详见官方文档)不同采样级别的差异:

层级优化器何时使用动态采样动态采样数据块数量
0不做动态采样分析0
1Oracle对没有分析的表进行动态采样,但需要同时满足以下3个条件:(1)SQL中至少有一个未分析的非分区表(2)未分析的表没有索引(3)未分析的表占用的数据块要大于动态采样的数据块(32个)32
2对所有的未分析表做分析,动态采样的默认级别,默认动态采样数据块数为6464
3采样的表包含满足Level 2定义的所有表,同时包括,那些谓词有可能潜在地需要动态采样的表64
4采样的表包含满足Level 3定义的表,同时还包括一些表,它们包含一个单表的谓词会引用另外的2个列或者更多的列64
5采样的表包含满足Level 4定义的表128
6采样的表包含满足Level 4定义的表256
7采样的表包含满足Level 4定义的表512
8采样的表包含满足Level 4定义的表1024
9采样的表包含满足Level 4定义的表4086
10采样的表包含满足Level 4定义的表,使用动态采样对所有数据块做动态分析所有块
11当优化器探测到需要的采样时,对段段对象自动采样自动决定

采样的数据块越多,得到的分析数据就越接近于真实,但同时伴随着资源消耗也越大。

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!
Oracle统计信息之动态采样(Dynamic Sampling)后续精彩内容已被小麦苗无情隐藏,请输入验证码解锁本站所有文章!
验证码:
请先关注本站微信公众号,然后回复“验证码”,获取验证码。在微信里搜索“DB宝”或者“www_xmmup_com”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

嘿,我是小麦,需要帮助随时找我哦。
  • 18509239930
  • 个人微信

  • DB宝
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部