[20170612]FOR ALL COLUMNS SIZE repeat(11g).txt

--//昨天看了https://jonathanlewis.wordpress.com/2017/06/01/histogram-upgrade-2/,提到了直方图的问题,
--//特别是FOR ALL COLUMNS SIZE repeat引起的问题,在一些特殊情况要注意.

1.环境:
SCOTT@book> @ &r/ver1

PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

create table t (id number,pad varchar2(20),flag varchar2(1));
insert into t select rownum,lpad('a',20,'a') ,'a' from dual connect by level<=2e4;
insert into t select rownum+2e4,lpad('d',20,'d') ,'d' from dual connect by level<=2;
commit ;

SCOTT@book> SELECT flag, COUNT(*) FROM t GROUP BY flag;
F   COUNT(*)
- ----------
d          2
a      20000

SCOTT@book> exec dbms_stats.Gather_table_stats(ownname => user, tabname => 'T',method_opt => 'FOR ALL COLUMNS ');
PL/SQL procedure successfully completed.

select * from DBA_TAB_COL_STATISTICS where owner=user and table_name='T' and column_name='FLAG';

Record View
As of: 2017/6/12 9:35:03

OWNER:          SCOTT
TABLE_NAME:     T
COLUMN_NAME:    FLAG
NUM_DISTINCT:   2
LOW_VALUE:      61
HIGH_VALUE:     64
DENSITY:        0.000024997500249975
NUM_NULLS:      0
NUM_BUCKETS:    2
LAST_ANALYZED:  2017/6/12 9:33:35
SAMPLE_SIZE:    20002
GLOBAL_STATS:   YES
USER_STATS:     NO
AVG_COL_LEN:    2
HISTOGRAM:      FREQUENCY

--//建立了直方图.

SCOTT@book> set numw 36
SCOTT@book> select * from USER_TAB_HISTOGRAMS where column_name='FLAG';
TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER                       ENDPOINT_VALUE ENDPOINT_A
---------- ----------- --------------- ------------------------------------ ----------
T          FLAG                  20000 503652795277878000000000000000000000
T          FLAG                  20002 519229685853483000000000000000000000

--//如果应用模式发生变化,加入了2种值.

insert into t select rownum+2e4+2,lpad('b',20,'b') ,'b' from dual connect by level<=2e4;
insert into t select rownum+4e4+2,lpad('c',20,'c') ,'c' from dual connect by level<=2;
commit ;

SCOTT@book> exec dbms_stats.Gather_table_stats(ownname => user, tabname => 'T',method_opt => 'FOR ALL COLUMNS size repeat',no_invalidate=> false);
PL/SQL procedure successfully completed.

select * from DBA_TAB_COL_STATISTICS where owner=user and table_name='T' and column_name='FLAG';

Record View
As of: 2017/6/12 9:38:59

OWNER:          SCOTT
TABLE_NAME:     T
COLUMN_NAME:    FLAG
NUM_DISTINCT:   4
LOW_VALUE:      61
HIGH_VALUE:     64
DENSITY:        0.0000126552145963607
NUM_NULLS:      0
NUM_BUCKETS:    4
LAST_ANALYZED:  2017/6/12 9:38:10
SAMPLE_SIZE:    5432
GLOBAL_STATS:   YES
USER_STATS:     NO
AVG_COL_LEN:    2
HISTOGRAM:      FREQUENCY

--//因为bucket桶变成了4个,直方图依旧是FREQUENCY.

SCOTT@book> select * from USER_TAB_HISTOGRAMS where table_name='T' and column_name='FLAG';
TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER                       ENDPOINT_VALUE ENDPOINT_A
---------- ----------- --------------- ------------------------------------ ----------
T          FLAG                   2775 503652795277878000000000000000000000
T          FLAG                   5430 508845092136413000000000000000000000
T          FLAG                   5431 514037388994948000000000000000000000
T          FLAG                   5432 519229685853483000000000000000000000

SCOTT@book> alter session set statistics_level=all;
Session altered.

SCOTT@test01p> select * from t where flag='c';
   ID PAD                  F
----- -------------------- -
40003 cccccccccccccccccccc c
40004 cccccccccccccccccccc c

SCOTT@book> @ &r/dpc '' ''
PLAN_TABLE_OUTPUT
-------------------------------------
SQL_ID  g3pmd0h5vnw5r, child number 0
-------------------------------------
select * from t where flag='c'

Plan hash value: 1601196873

--------------------------------------------------------------------------------------------------------------------
| Id  | Operation         | Name | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time   | A-Rows |   A-Time   | Buffers |
--------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |      1 |        |       |    68 (100)|          |      2 |00:00:00.01 |     204 |
|*  1 |  TABLE ACCESS FULL| T    |      1 |      7 |   196 |    68   (0)| 00:00:01 |      2 |00:00:00.01 |     204 |
--------------------------------------------------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
   1 - SEL$1 / T@SEL$1
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - filter("FLAG"='c')
23 rows selected.

--//可以发现E-rows 与 A-rows 差距不大,而12c的情况就不同了.12c如果使用method_opt => 'FOR ALL COLUMNS size repeat'后,
--//bucket=2,直方图变成了混合型直方图.也就是如果升级12c,要注意分析方法method_opt => 'FOR ALL COLUMNS size repeat'带来的问题.
--//再写有点长,另外写看12c的测试.

--//当然如果数据模型没有发生变化,问题可以不考虑.

[20170612]FOR ALL COLUMNS SIZE repeat(11g).txt的更多相关文章

  1. [20170612]FOR ALL COLUMNS SIZE repeat(12c).txt

    [20170612]FOR ALL COLUMNS SIZE repeat(12c).txt --//昨天看了https://jonathanlewis.wordpress.com/2017/06/0 ...

  2. [20190219]那个更快(11g).txt

    [20190219]那个更快(11g).txt --//前几天测试11g Query Result Cache RC Latches时,链接http://blog.itpub.net/267265/v ...

  3. [20171211]ora-16014 11g.txt

    [20171211]ora-16014 11g.txt --//上午测试了10g下备库log_archive_dest_1参数配置VALID_FOR=(ONLINE_LOGFILES,ALL_ROLE ...

  4. [20180819]关于父子游标问题(11g).txt

    [20180819]关于父子游标问题(11g).txt --//sql语句存在父子游标,子游标堆6在父游标堆0里面.--//如果存在许多子游标的情况下,父游标堆0是否大小是发生变化呢.测试看看.--/ ...

  5. [20171120]理解v$session的state字段(11G).txt

    [20171120]理解v$session的state字段(11G).txt --//https://blogs.oracle.com/database4cn/vsession-%e4%bd%a0%e ...

  6. [20180118]tstats的问题.txt

    [20180118]tstats的问题.txt --//关于使用tstats收集处理统计信息,可以看链接http://blog.itpub.net/267265/viewspace-1987839/ ...

  7. 9i oracle数据库迁移到11G(exp)

    这个是之前生产上打算迁移的文档,后面离职了没有在停机迁移,但是测试过几次没有问题,其中需要把9I的110,120库迁移到11g一个数据库中,但是110,120库之间有相同的表名字,以及有DBLINK. ...

  8. [20180828]exadata--豆腐渣系统的保护神.txt

    [20180828]exadata--豆腐渣系统的保护神.txt --//昨天看awr报表发现如下,时间8-9点报表,这个时间病房业务很少,主要门诊的业务: 1.awr报表情况:Top 10 Fore ...

  9. [统计信息系列7] Oracle 11g的自动统计信息收集

    (一)统计信息收集概述 在Oracle 11g中,默认有3个自动任务,分别是:自动统计信息收集.SQL调优顾问.段空间调整顾问,查看方法如下: SQL> SELECT CLIENT_NAME,T ...

随机推荐

  1. 微信分享config:ok 但自定义内容无效

    一.问题 使用微信 JSSDK 分享,出现自定义内容无效 ,也就是分享出去的内容不是你配置的内容. 但在调试过程中发现 congfig 都是 ok 的 二.解决 检查config 配置是否正确 js ...

  2. 【转】vmware 安装 osx 无法登录 appstore 的解决办法 (伪造smbios设备信息)

    伪造smbios设备信息 原文网址:http://www.insanelymac.com/forum/topic/292170-how-to-spoof-real-mac-in-vmware/page ...

  3. 浅析JavaScript之数组

    一  概述 JavaScript数组同后端语言一样,具有它自己的数据结构,归根结底,这种数据结构,本质就是一种集合. 在后端语言中(如java,.net等),数组是这样定义的:数组是用来存储相同数据类 ...

  4. 乐观锁机制解决多层嵌套异步ajax问题

    前言 在项目中我们通常需要使用ajax异步嵌套去请求数据并做数据的展示,当我们多次快速的多次的发起ajax,因为ajax是异步的,每个ajax触发回调的时间都是不可控的,这样就会造成前面发起的ajax ...

  5. AFNetworking封装-项目使用

    本篇博客是接着上一篇AFNetworking源码解析的后续,如果想对AFNetworking源码有所了解. 请读一下https://www.cnblogs.com/guohai-stronger/p/ ...

  6. h5py快速入门指南

    h5py是Python语言用来操作HDF5的模块.下面的文章主要介绍h5py的快速入门指南,翻译自h5py的官方文档:http://docs.h5py.org/en/latest/quick.html ...

  7. Vue父组件传递异步获取的数据给子组件

    问题场景: 当父组件传给子组件的数据是在父组件中异步获取的时候,如何让子组件获取期望的值? 在父组件中: 首先在data()中定义data_detail为空: data(){ data_detail: ...

  8. iis访问网络路径映射问题(UNC share)

    最近在做一个功能,涉及到nas网络磁盘文件的保存和访问,在服务器上将对应的路径映射为Z盘,结果在iis上部署网站直接访问该路径,报无法找到该路径的错误. 用的是.net core开发,在vs直接启动程 ...

  9. XAML: 在 MVVM 模式中,关于绑定的几处技巧

    以下会提到三个绑定的技巧,分别是 在 ListView 中为 ListViewItem 的 MenuFlyout 绑定 Command: 在 ListView 的 事件中绑定所选择项目,即其 Sele ...

  10. Elasticsearch系列(1):认识Elasticsearch

    官方定义 Elasticsearch 是一个实时的分布式搜索分析引擎, 它能让你以一个之前从未有过的速度和规模,去探索你的数据. 它被用作全文检索.结构化搜索.分析以及这三个功能的组合. Elasti ...