[20170604]12c Top Frequency histogram补充.txt
[20170604]12c Top Frequency histogram补充.txt
1.环境:
SCOTT@test01p> @ ver1
PORT_STRING VERSION BANNER CON_ID
------------------------------ -------------- -------------------------------------------------------------------------------- ----------
IBMPC/WIN_NT64-9.1.0 12.1.0.1.0 Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production 0
--//如果要建立Top Frequency histogram必须要满足几个条件:
--//链接 raajeshwaran.blogspot.co.id/2016/06/top-frequency-histogram-in-12c.html
The database creates a Top frequency histogram, when the following criteria are met.
NDV is greater than n, where n is the requested number of buckets (default 254)
The percentage of rows occupied by Top-frequent values is greater than or equal to the threshold p where p is (1-(1/n)*100).
The estimate_percent parameter in dbms_stats gathering procedure should be auto_sample_size (set to default)
SCOTT@test01p> create table t as select * from dba_objects;
Table created.
select column_name,num_distinct,density,histogram,SAMPLE_SIZE
from user_tab_col_statistics
where table_name ='T'
and column_name ='OWNER';
COLUMN_NAME NUM_DISTINCT DENSITY HISTOGRAM SAMPLE_SIZE
-------------------- ------------ ---------- --------------- -----------
OWNER 32 .03125 NONE 91695
--//12c ctas 建立统计信息,但是不会建立直方图.density 1/32=.03125.
SCOTT@test01p> select count(*) from t;
COUNT(*)
----------
91695
--//随手写的sql语句:
with a as (select distinct owner,count(*) over(partition by owner) n1 ,count(*) over () n2 from t order by 2 desc ),
b as (select owner,n1,n2,sum(n1) over (order by n1 desc) n3 from a order by n1 desc)
select rownum,owner,n1,n2,n3,round(n3/n2,5) x1,round(1-1/rownum,5) x2 from b;
ROWNUM OWNER N1 N2 N3 X1 X2
------ ----------------- ----- ---------- ---------- ---------- ----------
1 SYS 41942 91695 41942 .45741 0
2 PUBLIC 37142 91695 79084 .86247 .5
3 APEX_040200 3405 91695 82489 .8996 .66667
4 ORDSYS 3157 91695 85646 .93403 .75
5 MDSYS 1819 91695 87465 .95387 .8
6 XDB 985 91695 88450 .96461 .83333
7 SYSTEM 641 91695 89091 .9716 .85714
8 CTXSYS 405 91695 89496 .97602 .875
9 WMSYS 387 91695 89883 .98024 .88889
10 DVSYS 352 91695 90235 .98408 .9
11 SH 309 91695 90544 .98745 .90909
12 ORDDATA 292 91695 90836 .99063 .91667
13 LBACSYS 209 91695 91045 .99291 .92308
14 OE 142 91695 91187 .99446 .92857
15 SCOTT 96 91695 91283 .99551 .93333
16 GSMADMIN_INTERNAL 77 91695 91360 .99635 .9375
17 IX 58 91695 91418 .99698 .94118
18 DBSNMP 55 91695 91473 .99758 .94444
19 PM 44 91695 91517 .99806 .94737
20 HR 35 91695 91552 .99844 .95
21 OLAPSYS 25 91695 91577 .99871 .95238
22 OJVMSYS 23 91695 91600 .99896 .95455
23 DVF 19 91695 91619 .99917 .95652
24 FLOWS_FILES 13 91695 91632 .99931 .95833
25 AUDSYS 12 91695 91644 .99944 .96
26 ORDPLUGINS 10 91695 91664 .99966 .96154
27 OUTLN 10 91695 91664 .99966 .96296
28 BI 8 91695 91688 .99992 .96429
29 ORACLE_OCM 8 91695 91688 .99992 .96552
30 SI_INFORMTN_SCHEM 8 91695 91688 .99992 .96667
31 APPQOSSYS 5 91695 91693 .99998 .96774
32 TEST 2 91695 91695 1 .96875
D:\temp>cat a1.sql
cat a1.sql
exec dbms_stats.gather_table_stats(ownname=>user,tabname=>'T',method_opt=>'for columns owner size &1');
select column_name,num_distinct,density,histogram,SAMPLE_SIZE from user_tab_col_statistics where table_name ='T' and column_name ='OWNER';
SCOTT@test01p> @ a1.sql 2
PL/SQL procedure successfully completed.
COLUMN_NAME NUM_DISTINCT DENSITY HISTOGRAM SAMPLE_SIZE
-------------------- ------------ ---------- --------------- -----------
OWNER 32 .03125 HYBRID 5500
SCOTT@test01p> @ a1.sql 3
PL/SQL procedure successfully completed.
COLUMN_NAME NUM_DISTINCT DENSITY HISTOGRAM SAMPLE_SIZE
-------------------- ------------ ---------- --------------- -----------
OWNER 32 5.4529E-06 TOP-FREQUENCY 91695
SCOTT@test01p> @ a1.sql 4
PL/SQL procedure successfully completed.
COLUMN_NAME NUM_DISTINCT DENSITY HISTOGRAM SAMPLE_SIZE
-------------------- ------------ ---------- --------------- -----------
OWNER 32 5.4529E-06 TOP-FREQUENCY 91695
SCOTT@test01p> @ a1.sql 31
PL/SQL procedure successfully completed.
COLUMN_NAME NUM_DISTINCT DENSITY HISTOGRAM SAMPLE_SIZE
-------------------- ------------ ---------- --------------- -----------
OWNER 32 5.4529E-06 TOP-FREQUENCY 91695
SCOTT@test01p> @ a1.sql 32
PL/SQL procedure successfully completed.
COLUMN_NAME NUM_DISTINCT DENSITY HISTOGRAM SAMPLE_SIZE
-------------------- ------------ ---------- --------------- -----------
OWNER 32 5.4529E-06 FREQUENCY 91695
--//除了bucket=2,32建立的直方图HYBRID,FREQUENCY外,建立的都是TOP-FREQUENCY.
--//以10个bucket为例.解方程式(90235-x)/(91695-x)=0.9 ,得到x=77095.也就是要减少77095.
--//delete t where owner='SYS' and rownum<=41000;
--//delete t where owner='PUBLIC' and rownum<=36095;
SCOTT@test01p> delete t where owner='SYS' and rownum<=41000;
41000 rows deleted.
SCOTT@test01p> delete t where owner='PUBLIC' and rownum<=36095;
36095 rows deleted.
SCOTT@test01p> commit ;
Commit complete.
with a as (select distinct owner,count(*) over(partition by owner) n1 ,count(*) over () n2 from t order by 2 desc ),
b as (select owner,n1,n2,sum(n1) over (order by n1 desc) n3 from a order by n1 desc)
select rownum,owner,n1,n2,n3,round(n3/n2,5) x1,round(1-1/rownum,5) x2 from b where rownum<=11;
ROWNUM OWNER N1 N2 N3 X1 X2
------ ----------- ---- ---------- ---------- ---------- ----------
1 APEX_040200 3405 14600 3405 .23322 0
2 ORDSYS 3157 14600 6562 .44945 .5
3 MDSYS 1819 14600 8381 .57404 .66667
4 PUBLIC 1047 14600 9428 .64575 .75
5 XDB 985 14600 10413 .71322 .8
6 SYS 942 14600 11355 .77774 .83333
7 SYSTEM 641 14600 11996 .82164 .85714
8 CTXSYS 405 14600 12401 .84938 .875
9 WMSYS 387 14600 12788 .87589 .88889
10 DVSYS 352 14600 13140 .9 .9
11 SH 309 14600 13449 .92116 .90909
11 rows selected.
--//backet=10,前面10个值占90%.
SCOTT@test01p> @ a1 10
PL/SQL procedure successfully completed.
COLUMN_NAME NUM_DISTINCT DENSITY HISTOGRAM SAMPLE_SIZE
-------------------- ------------ ---------- --------------- -----------
OWNER 32 .000034247 TOP-FREQUENCY 14600
--//再减少1条记录.
SCOTT@test01p> delete t where owner='SYS' and rownum<=1;
1 row deleted.
SCOTT@test01p> commit ;
Commit complete.
ROWNUM OWNER N1 N2 N3 X1 X2
------ ----------- ---- ---------- ---------- ---------- ----------
1 APEX_040200 3405 14599 3405 .23324 0
2 ORDSYS 3157 14599 6562 .44948 .5
3 MDSYS 1819 14599 8381 .57408 .66667
4 PUBLIC 1047 14599 9428 .6458 .75
5 XDB 985 14599 10413 .71327 .8
6 SYS 941 14599 11354 .77772 .83333
7 SYSTEM 641 14599 11995 .82163 .85714
8 CTXSYS 405 14599 12400 .84937 .875
9 WMSYS 387 14599 12787 .87588 .88889
10 DVSYS 352 14599 13139 .89999 .9
11 SH 309 14599 13448 .92116 .90909
11 rows selected.
--//现在前10占.89999.
SCOTT@test01p> @ a1 10
PL/SQL procedure successfully completed.
COLUMN_NAME NUM_DISTINCT DENSITY HISTOGRAM SAMPLE_SIZE
-------------------- ------------ ---------- --------------- -----------
OWNER 32 .018378 HYBRID 14599
--//可以发现建立的直方图不是TOP-FREQUENCY,而是HYBRID(混合型直方图).
--//转化成TOP-FREQUENCY.
SCOTT@test01p> insert into t select * from dba_objects where owner='SYS' and rownum=1;
1 row created.
SCOTT@test01p> commit ;
Commit complete.
SCOTT@test01p> @ a1 10
PL/SQL procedure successfully completed.
COLUMN_NAME NUM_DISTINCT DENSITY HISTOGRAM SAMPLE_SIZE
-------------------- ------------ ---------- --------------- -----------
OWNER 32 .000034247 TOP-FREQUENCY 14600
--//以上内容是昨天的测试.
--//前面我提到如果取样不是auto_sample_size,也可能不行,测试看看.
2.取样大小Estimate_Percent => NULL.
SCOTT@test01p> exec dbms_stats.gather_table_stats(ownname=>user,tabname=>'T',method_opt=>'for columns owner size 10',Estimate_Percent => NULL);
PL/SQL procedure successfully completed.
SCOTT@test01p> select column_name,num_distinct,density,histogram,SAMPLE_SIZE from user_tab_col_statistics where table_name ='T' and column_name ='OWNER';
COLUMN_NAME NUM_DISTINCT DENSITY HISTOGRAM SAMPLE_SIZE
-------------------- ------------ ---------- --------------- -----------
OWNER 32 .018379 HYBRID 14600
--//可以发现如果全取样,反而生成混合型直方图.
3.取样大小Estimate_Percent => SYS.DBMS_STATS.AUTO_SAMPLE_SIZE,Block_sample => TRUE.
SCOTT@test01p> exec dbms_stats.gather_table_stats(ownname=>user,tabname=>'T',method_opt=>'for columns owner size 10',Estimate_Percent => SYS.DBMS_STATS.AUTO_SAMPLE_SIZE,Block_sample => TRUE);
PL/SQL procedure successfully completed.
SCOTT@test01p> select column_name,num_distinct,density,histogram,SAMPLE_SIZE from user_tab_col_statistics where table_name ='T' and column_name ='OWNER';
COLUMN_NAME NUM_DISTINCT DENSITY HISTOGRAM SAMPLE_SIZE
-------------------- ------------ ---------- --------------- -----------
OWNER 32 .000034247 TOP-FREQUENCY 14600
--//可以发现Estimate_Percent=>SYS.DBMS_STATS.AUTO_SAMPLE_SIZE,不管是块取样依旧.
4.取样Estimate_Percent => 100,90看看.
SCOTT@test01p> exec dbms_stats.gather_table_stats(ownname=>user,tabname=>'T',method_opt=>'for columns owner size 10',Estimate_Percent => 100);
PL/SQL procedure successfully completed.
SCOTT@test01p> select column_name,num_distinct,density,histogram,SAMPLE_SIZE from user_tab_col_statistics where table_name ='T' and column_name ='OWNER';
COLUMN_NAME NUM_DISTINCT DENSITY HISTOGRAM SAMPLE_SIZE
-------------------- ------------ ---------- --------------- -----------
OWNER 32 .062908991 HEIGHT BALANCED 14600
SCOTT@test01p> exec dbms_stats.gather_table_stats(ownname=>user,tabname=>'T',method_opt=>'for columns owner size 10',Estimate_Percent => 90);
PL/SQL procedure successfully completed.
SCOTT@test01p> select column_name,num_distinct,density,histogram,SAMPLE_SIZE from user_tab_col_statistics where table_name ='T' and column_name ='OWNER';
COLUMN_NAME NUM_DISTINCT DENSITY HISTOGRAM SAMPLE_SIZE
-------------------- ------------ ---------- --------------- -----------
OWNER 32 .0625 HEIGHT BALANCED 13108
--//看来仅仅Estimate_Percent => SYS.DBMS_STATS.AUTO_SAMPLE_SIZE才会生成TOP-FREQUENCY直方图.
SCOTT@test01p> exec dbms_stats.gather_table_stats(ownname=>user,tabname=>'T',method_opt=>'for columns owner size 10',Estimate_Percent => SYS.DBMS_STATS.AUTO_SAMPLE_SIZE);
PL/SQL procedure successfully completed.
SCOTT@test01p> select column_name,num_distinct,density,histogram,SAMPLE_SIZE from user_tab_col_statistics where table_name ='T' and column_name ='OWNER';
COLUMN_NAME NUM_DISTINCT DENSITY HISTOGRAM SAMPLE_SIZE
-------------------- ------------ ---------- --------------- -----------
OWNER 32 .000034247 TOP-FREQUENCY 14600
--//有机会研究HYBRID直方图.
[20170604]12c Top Frequency histogram补充.txt的更多相关文章
- [20170603]12c Top Frequency histogram.txt
---恢复内容开始--- [20170603]12c Top Frequency histogram.txt --//个人对直方图了解很少,以前2种直方图类型对于目前的许多应用来讲已经足够,或者讲遇到 ...
- [20180928]ora-01426(补充).txt
[20180928]ora-01426(补充).txt --//链接:http://www.itpub.net/thread-2105458-1-1.html--//做一点点必要的补充: 1.环境:S ...
- [20170916]sqlplus set array最小2补充.txt
[20170916]sqlplus set array最小2补充.txt --//以前写的贴子,链接http://blog.itpub.net/267265/viewspace-1453652/--/ ...
- [20190312]关于增量检查点的疑问(补充).txt
[20190312]关于增量检查点的疑问(补充).txt --//有人问我以前写一个帖子的问题,关于增量检查点的问题,链接如下:http://blog.itpub.net/267265/viewspa ...
- [20190214]11g Query Result Cache RC Latches补充.txt
[20190214]11g Query Result Cache RC Latches补充.txt --//上午测试链接:http://blog.itpub.net/267265/viewspace- ...
- [20181108]12c sqlplus rowfetch参数4.txt
[20181108]12c sqlplus rowfetch参数4.txt --//12cR2 可以改变缺省rowfetch参数.11g之前缺省是1.通过一些测试说明问题.--//前几天做的测试有点乱 ...
- [20181031]12c 在线移动数据文件.txt
[20181031]12c 在线移动数据文件.txt --//12c以前,移动或者改名数据文件是一项比较麻烦的事情,至少要停一下业务.而12c支持在线移动或者改名数据文件,并且有点不可思议--//的是 ...
- [20171107]dbms_shared_pool.pin补充.txt
[20171107]dbms_shared_pool.pin补充.txt --//上午的测试,做一些补充,主要还是一些理解问题. 1.环境:SCOTT@book> @ &r/ver1 P ...
- top 自动执行的shell脚本中,使用top -n 1 > log.txt, 上电自动执行,文件无输出
. 自动执行的shell脚本中,使用top -n > log.txt, 上电自动执行,文件无输出,使用一下命令解决: //usr/bin/top -d -n -b > log.txt 如果 ...
随机推荐
- ubuntu mysql Access denied for user root@localhost
解决办法: 1. vim mysqld.cnf 路径:/etc/mysql/mysql.conf.d 在[mysqld]下添加skip-grant-tables 2. 重启mysql服务 servi ...
- MyBatis源码解析(一)——执行流程
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6603926.html 一.MyBatis简介 MyBatis框架是一种轻量级的ORM框架, ...
- Java——String对象
前言 实际上任何语言都没有提供字符串这个概念,而是使用字符数组来描述字符串.Java里面严格来说也是没有字符串的,在所有的开发里面字符串的应用有很多,于是Java为了应对便创建了String类这个字符 ...
- Coder解压探索===冥想补蓝v.1.0
主题是什么? 这是一篇是我自己在探索冥想术的过程中,有了一些浅薄的收获,所以写出来记录与分享. 我不太记得最早是因为什么原因去学习冥想,一开始对我而言,这个词带有很多成见,诸如“老僧入定”“三界六道” ...
- javascript小实例,在页面中输出当前客户端时间
时间对象(Date())比较简单,本文旨在为初学者入门使用,大牛可略过! 本文承接基础知识实例,说一下实例的要求: 在页面中输出当前客户端时间(2015年1月1日星期一10:10:10这样的格式),每 ...
- Keras入门(二)模型的保存、读取及加载
本文将会介绍如何利用Keras来实现模型的保存.读取以及加载. 本文使用的模型为解决IRIS数据集的多分类问题而设计的深度神经网络(DNN)模型,模型的结构示意图如下: 具体的模型参数可以参考文章 ...
- 验证码图片二值化问题 BitmapData 怎么解决
对不起,这算是一篇求助啦,先上图,防止不清楚,放大了一点,下面是图片,上面是没有二值化的,下面是二值化之后的,我其实不懂什么是二值化啦,就是一定范围变黑,变白 问题: 为什么我的结果上面还是有很多彩色 ...
- JQuery官方学习资料(译):Attributes
Attributes 元素的属性可以为你的应用程序包含有用的信息,重要的是能够获取和设置它. .attr()方法 .attr()方法是可获取和可设置的,在设置状态下,.attr()可以 ...
- js中const,var,let区别(转载)
js中const,var,let区别 来源:https://www.cnblogs.com/zzsdream/p/6372729.html 今天第一次遇到const定义的变量,查阅了相关资料整理了这篇 ...
- SVN、CVS、VSS区别
废话不多说,撸起袖子敲黑板 !~~ #首先向大家简要描述一下SVN与CVS.VSS的介绍与对比: 介绍: 三种都是版本控制软件, 多数用于源代码管理1.CVS(Concurrent Version S ...