Deferred statistics publish,延迟统计信息发布,将新生成的统计信息存放到一块临时的区域,供充分测试以验证统计信息对执行计划确有促进作用的情况下,再发布到数据字典供全局session使用,规避了因收集方法不当等原因引起统计信息不准确从而导致optimizer选择次优plan的问题

---创建测试表
drop table dsptest1;
create table dsptest1 tablespace ts_acct_dat_01 as select * from dba_objects where object_type in ('TABLE','PROGRAM');

select object_type,count(1) from dsptest1 group by object_type;
OBJECT_TYPE           COUNT(1)
------------------- ----------
PROGRAM                     19
TABLE                    63650

create index ind_objtype on dsptest1(object_type) tablespace ts_acct_ind_01;

---在没有统计信息的情况下、以禁用dynamic sampling的方式运行查询,在数据分布具有明显倾斜度的情况下,迫使optimizer走索引,如果不禁用dynamic sampling optimizer会选择FTS
alter session set optimizer_dynamic_sampling=0;
set linesize 170
explain plan for select * from dsptest1 where object_type='TABLE';
select * from table(dbms_xplan.display());

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 2822084974

-------------------------------------------------------------------------------------------
| Id  | Operation                   | Name        | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |             |   758 |   153K|    79   (0)| 00:00:01 |
|   1 |  TABLE ACCESS BY INDEX ROWID| DSPTEST1    |   758 |   153K|    79   (0)| 00:00:01 |
|*  2 |   INDEX RANGE SCAN          | IND_OBJTYPE |   303 |       |    75   (0)| 00:00:01 |
-------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------

2 - access("OBJECT_TYPE"='TABLE')

14 rows selected.

---查看dsptest1表的统计信息偏好值
select dbms_stats.get_prefs('publish','ad','dsptest1') from dual;
DBMS_STATS.GET_PREFS('PUBLISH','AD','DSPTEST1')
--------------------------------------------------------------------------------
TRUE

---设置publish偏好值为FALSE
exec dbms_stats.set_table_prefs('ad','dsptest1','publish','false');

select dbms_stats.get_prefs('publish','ad','dsptest1') from dual;
DBMS_STATS.GET_PREFS('PUBLISH','AD','DSPTEST1')
--------------------------------------------------------------------------------
FALSE

---执行统计(带histogram信息)
exec dbms_stats.gather_Table_stats('ad','dsptest1',cascade=>TRUE,method_opt=>'for all columns size skewonly');

---查看数据字典里无相关统计信息
set linesize 150
select owner,table_name,num_rows,last_analyzed from dba_tab_statistics where table_name='DSPTEST1';
OWNER                          TABLE_NAME                       NUM_ROWS LAST_ANALYZED
------------------------------ ------------------------------ ---------- -----------------
AD                             DSPTEST1

select owner,index_name,blevel,clustering_factor from dba_ind_statistics where index_name='IND_OBJID';

no rows selected

---查看pending区域里的统计信息
select owner,table_name,num_rows,last_analyzed from dba_tab_pending_stats where table_name='DSPTEST1';

OWNER                          TABLE_NAME                       NUM_ROWS LAST_ANALYZED
------------------------------ ------------------------------ ---------- -----------------
AD                             DSPTEST1                            63669 20150104 07:43:42

select owner,index_name,blevel,clustering_factor from dba_ind_pending_stats where index_name='IND_OBJTYPE';

OWNER                          INDEX_NAME                         BLEVEL CLUSTERING_FACTOR
------------------------------ ------------------------------ ---------- -----------------
AD                             IND_OBJTYPE                                             913

---OPTIMIZER_USE_PENDING_STATISTICS=FALSE时重新执行查询,用的还是range scan
SQL> show parameter optimizer_use_pending_statistics

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
optimizer_use_pending_statistics     boolean     FALSE

alter session set optimizer_dynamic_sampling=0;

set linesize 170
explain plan for select * from dsptest1 where object_type='TABLE';
select * from table(dbms_xplan.display());
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 2822084974

-------------------------------------------------------------------------------------------
| Id  | Operation                   | Name        | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |             |   758 |   153K|    79   (0)| 00:00:01 |
|   1 |  TABLE ACCESS BY INDEX ROWID| DSPTEST1    |   758 |   153K|    79   (0)| 00:00:01 |
|*  2 |   INDEX RANGE SCAN          | IND_OBJTYPE |   303 |       |    75   (0)| 00:00:01 |
-------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------

2 - access("OBJECT_TYPE"='TABLE')

---OPTIMIZER_USE_PENDING_STATISTICS=TRUE时重新执行查询,用上了FTS,说明optimizer使用了pending statistics
alter Session set OPTIMIZER_USE_PENDING_STATISTICS=TRUE;

SQL> show parameter optimizer_use_pending_statistics

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
optimizer_use_pending_statistics     boolean     TRUE

alter session set optimizer_dynamic_sampling=0;

set linesize 170
explain plan for select * from dsptest1 where object_type='TABLE';
select * from table(dbms_xplan.display());

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 2565776708

------------------------------------------------------------------------------
| Id  | Operation         | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
------------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |          | 63652 |  5967K|   164   (2)| 00:00:02 |
|*  1 |  TABLE ACCESS FULL| DSPTEST1 | 63652 |  5967K|   164   (2)| 00:00:02 |
------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

1 - filter("OBJECT_TYPE"='TABLE')

13 rows selected.

---publish pending stats
exec dbms_stats.publish_pending_stats(ownname=>'ad',tabname=>'dsptest1');

---查看数据字典里的统计信息
set linesize 150
select owner,table_name,num_rows,last_analyzed from dba_tab_statistics where table_name='DSPTEST1';
OWNER                          TABLE_NAME                       NUM_ROWS LAST_ANALYZED
------------------------------ ------------------------------ ---------- -----------------
AD                             DSPTEST1                            63669 20150104 07:43:42

select owner,index_name,blevel,clustering_factor,last_analyzed from dba_ind_statistics where index_name='IND_OBJTYPE';

OWNER                          INDEX_NAME                         BLEVEL CLUSTERING_FACTOR LAST_ANALYZED
------------------------------ ------------------------------ ---------- ----------------- -----------------
AD                             IND_OBJTYPE                             1               913 20150104 07:43:45

---OPTIMIZER_USE_PENDING_STATISTICS=FALSE再次执行查询,optimizer准确的选择了FTS,这次是从data dictionary里获取的statistics
alter Session set OPTIMIZER_USE_PENDING_STATISTICS=FALSE;

set linesize 170
explain plan for select * from dsptest1 where object_type='TABLE';
select * from table(dbms_xplan.display());
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 2565776708

------------------------------------------------------------------------------
| Id  | Operation         | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
------------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |          | 63652 |  5967K|   164   (2)| 00:00:02 |
|*  1 |  TABLE ACCESS FULL| DSPTEST1 | 63652 |  5967K|   164   (2)| 00:00:02 |
------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

1 - filter("OBJECT_TYPE"='TABLE')

13 rows selected.

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

转载于:http://blog.itpub.net/53956/viewspace-1376621/

Deferred statistics publish-延迟统计信息发布功能介绍相关推荐

  1. Oracle 12c数据库优化器统计信息收集的最佳实践

    Oracle 12c数据库优化器统计信息收集的最佳实践 转载自     沃趣科技(ID:woqutech) 作者         刘金龙(译) 原文链接   http://www.oracle.com ...

  2. 性能优化——统计信息——SQLServer自动更新和自动创建统计信息选项

    原文: 性能优化--统计信息--SQLServer自动更新和自动创建统计信息选项 原文译自:http://www.mssqltips.com/sqlservertip/2766/sql-server- ...

  3. SQL Server中的筛选后的统计信息和CE模型变化

    In this blog post, we are going to view some interesting model variation, that I've found while expl ...

  4. execution 排除_使用SQL Server 2016 Live Execution统计信息对SQL查询性能进行故障排除

    execution 排除 SQL Server Management Studio a graphical interactive that allows you to interact with t ...

  5. oracle ola_Ola HallengrenSQL Server维护解决方案–索引和统计信息维护

    oracle ola This is the third article in Ola Hallengren's SQL Server Maintenance Solution series. The ...

  6. Oracle收集统计信息

    Oracle收集统计信息 优化器统计范围: 表统计: --行数,块数,行平均长度:all_tables:NUM_ROWS,BLOCKS,AVG_ROW_LEN: 列统计: --列中唯一值的数量(NDV ...

  7. Oracle并发(CONCURREMT)收集统计信息 (文档 ID 1555451.1)

    Oracle并发(CONCURREMT)收集统计信息 (文档 ID 1555451.1) 编辑手记:从11.2开始,可以通过CONCURRENT参数,启用表或分区的并行扫描,加快统计信息的收集速度. ...

  8. 详解Oracle统计信息

    优化器统计范围: 表统计: --行数,块数,行平均长度:all_tables:NUM_ROWS,BLOCKS,AVG_ROW_LEN: 列统计: --列中唯一值的数量(NDV),NULL值的数量,数据 ...

  9. 收集oracle统计信息

    原文地址为: 收集oracle统计信息 优化器统计范围: 表统计: --行数,块数,行平均长度:all_tables:NUM_ROWS,BLOCKS,AVG_ROW_LEN: 列统计: --列中唯一值 ...

最新文章

  1. NeurIPS 2019 获奖论文出炉,微软华人学者Lin Xiao 获经典论文奖
  2. network setup service启动后自动停止_一个简单的测试环境下的自动化部署方案
  3. boost::spirit模块实现罗马数字解析器(演示符号表)的测试程序
  4. Redis整合springboot实现哨兵模式
  5. dev gridview 打印列数过多_R语言:如何将多张统计图绘制在一张上面
  6. mac怎么查看gitlab的注册邮箱_163电子邮箱怎么注册申请?手机号注册电子邮箱的小技巧...
  7. 冯雪 手术机器人的应用_未来达芬奇手术机器人的应用将更为广阔
  8. uni-calendar更改打点颜色实现签到和缺勤不同打点颜色效果
  9. ElasticSearch 聚合查询
  10. solr 高亮springdatasolr
  11. 将Visual Studio更新到最新版本
  12. python 图形_Python切分图像小案例(1、3、2、4象限子图互换)
  13. Python之socketserver源码分析
  14. char与byte差异
  15. 联想y430完全拆机图解_视频深度拆解:联想IdeaPad Y430全揭秘
  16. 利用 0DAY 漏洞 CVE-2018-8174 获取windows系统 shell
  17. 技术栈(technology stack)
  18. opencv normalize()函数详解
  19. 链路追踪Zipkin
  20. 计算机网络原理IP计算总结

热门文章

  1. 私域运营_技巧全套攻略(共207份)
  2. profile builder 3中文版 附使用教程
  3. 破解网吧各类****线
  4. ROS教程五——运行 Publisher和Subscriber
  5. 打枣与杀猪,关羽张飞的武功是怎么来的?
  6. 傅里叶变换、离散时间傅里叶变换和离散傅里叶变换
  7. 高通平台android kernel 开机logo显示和传统linux一样
  8. 解决CSDN阅读全部需要登录的问题
  9. 闯荡江湖的必备指南(3)
  10. 网页设计师的字体替换方法指南