微课sql优化(6)、统计信息收集(4)-关于动态采样

来源:这里教程网 时间:2026-03-03 15:13:28 作者:

1、关于动态采样


动态采样会增加缺少或不足的优化器统计信息。使用动态采样,优化器可以通过对谓词选择性做出更好的估计来改进计划。动态采样可以补充诸如表块计数,适用的索引块计数,表基数(估计行数)和相关连接列统计信息。
特点总结:
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、做好充足的统计信息收集,避免动态采样。

相关推荐