从 oracle database 12c release 1 (12.1)开始,如果动态统计信息被打开的话,那么优化器会自动的去决定:
-
是否动态统计信息是有用的
-
哪个采样级别被使用
在 12c 上自动动态统计信息默认是启用的,optimizer_dynamic_sampling 默认值为2。当满足下面任一条件时自动动态统计信息将有效:
-
初始化参数 optimizer_dynamic_sampling 设置为默认值
或者
optimizer_dynamic_sampling 设置成11(如:默认值和11以外的值将关闭 ads)
-
使用 sql hint 启用动态统计信息
-
查询启用了并行
-
查询之前执行过,并且它的历史信息存在(来自 cursor cache, automatic workload repository,或者 sql management base)
在使用 adaptive query optimization 技术时(如:adaptive plans,statistics feedback, sql plan directives 等等),优化器会基于算法决定是否使用动态统计信息。
在使用 adaptive query optimization 时,触发 automatic dynamic sampling
在下面的条件下使用 adaptive query optimization 将触发自动动态采样:
-
当优化器发现 cardinality estimate 不准确时,ads 将被触发(不管 sql 语句是否是被重复执行的)
-
sql 语句使用到了 adaptive plans 时,ads 也会被触发
-
sql 语句用到了自动重新优化(作为 adaptive statistics 一部分),ads 也会被触发
阅读(816) | 评论(0) | 转发(0) |