ITPub博客

首页 > 数据库 > Oracle > 微课sql优化(6)、统计信息收集(4)-关于动态采样

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

原创 Oracle 作者:orastar 时间:2020-03-03 17:03:01 0 删除 编辑

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、做好充足的统计信息收集,避免动态采样。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31442014/viewspace-2678255/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
作者简介:惠星星,现就职于云和恩墨,持有OCP 10g、OCP 11g、OCM 11g证书,并有长达8年电力行业业务维护、数据库维护服务经验,擅长Oracle数据库性能优化、故障处理及Oracle internal研究。

注册时间:2017-03-08

  • 博文量
    171
  • 访问量
    429754