动态采样会增加缺少或不足的优化器统计信息。使用动态采样,优化器可以通过对谓词选择性做出更好的估计来改进计划。动态采样可以补充诸如表块计数,适用的索引块计数,表基数(估计行数)和相关连接列统计信息。
特点总结:
1、适用场景:统计信息缺失或不足时使用
2、优点: 动态采样可以帮忙优化器做出更好的执行计划选择
3、缺点: 占用系统资源。--非常占用资源
4、做好充足的统计信息收集,避免动态采样。
默认情况下,在数据库中启用动态采样。您可以通过设置初始化参数来禁用该功能OPTIMIZER_DYNAMIC_SAMPLING=0。
动态采样级别控制如何触发及采样率。你可以使用OPTIMIZER_DYNAMIC_SAMPLING初始化参数设置动态抽样率或SQL语句hint。
2、动态采样级别

3、练习4,优化以下语句,消除动态采样
create table ht.c_cons_ds as select * from ht.c_cons;
查询语句: select count(1) from ht.c_cons_ds;
set autot traceonly
select count(1) from ht.c_cons_ds;
查询执行计划
SQL> set autot traceonly
SQL> select count(1) from ht.c_cons_ds;
Execution Plan
----------------------------------------------------------
Plan hash value: 3975303649
------------------------------------------------------------------------
| Id | Operation
| Name | Rows | Cost (%CPU)| Time |
------------------------------------------------------------------------
| 0 | SELECT STATEMENT |
| 1 | 18
(0)| 00:00:01 |
| 1 | SORT AGGREGATE |
| 1 |
|
|
| 2 | TABLE ACCESS FULL| C_CONS_DS | 10000 | 18
(0)| 00:00:01 |
------------------------------------------------------------------------
Note
-----
-
dynamic sampling used for this statement (level=2)
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
58 consistent gets
0 physical reads
0 redo size
526 bytes sent via SQL*Net to client
523 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
收集统计信息
exec DBMS_STATS.GATHER_TABLE_STATS(ownname => 'HT',tabname => 'C_CONS_DS',estimate_percent => 100,method_opt => 'for all columns size repeat',no_invalidate => FALSE,degree => 4,cascade => TRUE);
再交查询执行计划
Execution Plan
----------------------------------------------------------
Plan hash value: 3975303649
------------------------------------------------------------------------
| Id | Operation
| Name | Rows | Cost (%CPU)| Time |
------------------------------------------------------------------------
| 0 | SELECT STATEMENT |
| 1 | 18
(0)| 00:00:01 |
| 1 | SORT AGGREGATE |
| 1 |
|
|
| 2 | TABLE ACCESS FULL| C_CONS_DS | 10000 | 18
(0)| 00:00:01 |
------------------------------------------------------------------------
Statistics
----------------------------------------------------------
1 recursive calls
0 db block gets
57 consistent gets
0 physical reads
0 redo size
526 bytes sent via SQL*Net to client
523 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
4、小结
1、适用场景:统计信息缺失或不足时使用
2、优点: 动态采样可以帮忙优化器做出更好的执行计划选择
3、缺点: 占用系统资源。--非常占用资源
4、做好充足的统计信息收集,避免动态采样。