Oracle
动态采样(
Dynamic Sampling
,
12c
称为
Dynamic statistics)
,是对统计信息的⼀一个重要补充,当数
据动态变化,⽆无法⽤用典型的统计信息描述时,动态采样可以给在解析时对表中数据进⾏行行采样,为优化器器提供
准确的估算值(
cardinality
)。动态采样的主要有以下⼏几个应⽤用场景:
⼀一个经典的场景就是业务场景中的临时表,⽐比如
ETL
数据清洗转换过程中的临时表,⽐比如
BI
系统中存
放计算报表结果的临时表。这些临时表可能是
Oracle
中的
global temporary table
,也可能是正常的堆
表。因为临时表中的数据时动态变化的,不不同时间点,临时表中的数据量量变化很⼤大,没有⼀一种合适的统
计信息使优化器器产⽣生合适的执⾏行行计划。这种场景适合采⽤用动态采样技术,通常会删除临时表上的统计信
息,并且锁定统计信息,不不让搜集统计信息的
Job
更更新临时表上的统计信息,查询临时表时,优化器器会
对临时表进⾏行行动态采样,以确定临时表的
cardinality
。
另⼀一个场景是在单表上使⽤用组合过滤条件,并且组合过滤条件并不不是简单的相等操作,或者在过滤列列上
使⽤用转换函数,⽆无法使⽤用
column group
扩展统计信息,简单使⽤用多个列列上的统计信息也⽆无法产⽣生合适
的统计信息。
12c
之前,动态采样只能预估单表
cardinality
,
12c
版本,
Oracle
对动态采样做了了很⼤大的增强,可以估
算
group by
的聚合结果集和连接结果集的
cardinality
。
使⽤用动态采样,优化器器往往可以获得⾼高质量量的估算值,从⽽而产⽣生更更优化的执⾏行行计划。本⽂文将介绍三种个动态
采样的适⽤用场景。
⾦金金融⾏行行业客户
CRM
系统的分析语句句执⾏行行时间经常需要
5
分钟以上,通过分析
Top SQL
的执⾏行行计划,发现执⾏行行
计划的估算值偏差离谱,⽐比如下图
SQL Monitor
报告中,对于表
P_CUST_STAT
,优化器器估算值为
1
,实际
值为⼀一千四百万⾏行行。导致后续连接⽅方式为
nested loop
,被驱动表被访问了了⼀一千四百万次。
深⼊入理理解
Oracle
动态采样
动态采样介绍
临时表和动态采样
优化器器动态采样解析
实际案例例