[20160516]统计分析参数method_opt.txt

[20160516]统计分析参数method_opt.txt

--统计分析参数method_opt我个人感觉是最能折腾人的参数.我自己曾经在这个参数上栽过跟头,通过例子来说明看看.

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

--如果你看包定义,可以发现有趣的事情,比如缺省定义:
DEFAULT_CASCADE          CONSTANT BOOLEAN  := null;
DEFAULT_DEGREE_VALUE     CONSTANT NUMBER   := 32766;
DEFAULT_ESTIMATE_PERCENT CONSTANT NUMBER   := 101;
DEFAULT_METHOD_OPT       CONSTANT VARCHAR2(1) := 'Z';
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DEFAULT_NO_INVALIDATE    CONSTANT BOOLEAN     := null;
DEFAULT_GRANULARITY      CONSTANT VARCHAR2(1) := 'Z';
DEFAULT_PUBLISH          CONSTANT BOOLEAN     := true;
DEFAULT_INCREMENTAL      CONSTANT BOOLEAN     := false;
DEFAULT_STALE_PERCENT    CONSTANT NUMBER      := 10;
DEFAULT_AUTOSTATS_TARGET CONSTANT VARCHAR2(1) := 'Z';
DEFAULT_STAT_CATEGORY    CONSTANT VARCHAR2(20) := 'OBJECT_STATS';

--可以发现缺省定义实际上是'Z'.

2.建立一个表测试看看:
SCOTT@book> create table t as select * from dba_objects;
Table created.

SCOTT@book> execute sys.dbms_stats.gather_table_stats ( OwnName => user,TabName => 't',Method_Opt => 'Z',Cascade => True ,No_Invalidate => false)
PL/SQL procedure successfully completed.

SCOTT@book> select column_name, num_distinct, DENSITY,histogram,NUM_BUCKETS from dba_tab_columns where table_name='T' and owner=user;
COLUMN_NAME          NUM_DISTINCT    DENSITY HISTOGRAM       NUM_BUCKETS
-------------------- ------------ ---------- --------------- -----------
OWNER                          29 .034482759 NONE                      1
OBJECT_NAME                 52164  .00001917 NONE                      1
SUBOBJECT_NAME                149 .006711409 NONE                      1
OBJECT_ID                   86946 .000011501 NONE                      1
DATA_OBJECT_ID               9044 .000110571 NONE                      1
OBJECT_TYPE                    46  .02173913 NONE                      1
CREATED                      1036 .000965251 NONE                      1
LAST_DDL_TIME                1307 .000765111 NONE                      1
TIMESTAMP                    1336 .000748503 NONE                      1
STATUS                          2         .5 NONE                      1
TEMPORARY                       2         .5 NONE                      1
GENERATED                       2         .5 NONE                      1
SECONDARY                       2         .5 NONE                      1
NAMESPACE                      21 .047619048 NONE                      1
EDITION_NAME                    0          0 NONE                      0
15 rows selected.

SCOTT@book> select dbms_stats.GET_PARAM('METHOD_OPT') c30 from dual ;
C30
------------------------------
FOR ALL COLUMNS SIZE AUTO
--缺省实际上是FOR ALL COLUMNS SIZE AUTO.顺便做一个查询包含全部字段.

SCOTT@book> select * from t where owner=user and OBJECT_NAME='T' and SUBOBJECT_NAME='1' and OBJECT_ID=12 and DATA_OBJECT_ID=12 and OBJECT_TYPE='TABLE' and CREATED=sysdate;
no rows selected

SCOTT@book> execute dbms_stats.flush_database_monitoring_info
PL/SQL procedure successfully completed.

SCOTT@book> execute sys.dbms_stats.gather_table_stats ( OwnName => user,TabName => 't',Method_Opt => 'Z',Cascade => True ,No_Invalidate => false)
PL/SQL procedure successfully completed.

SCOTT@book> select column_name, num_distinct, DENSITY,histogram,NUM_BUCKETS from dba_tab_columns where table_name='T' and owner=user;
COLUMN_NAME          NUM_DISTINCT    DENSITY HISTOGRAM       NUM_BUCKETS
-------------------- ------------ ---------- --------------- -----------
OWNER                          29 5.6432E-06 FREQUENCY                23
OBJECT_NAME                 52164  .00001917 NONE                      1
SUBOBJECT_NAME                149  .00094518 FREQUENCY               149
OBJECT_ID                   86946 .000011501 NONE                      1
DATA_OBJECT_ID               9044 .000110571 NONE                      1
OBJECT_TYPE                    46 5.6432E-06 FREQUENCY                32
CREATED                      1036 .002824859 HEIGHT BALANCED         254
LAST_DDL_TIME                1307 .000765111 NONE                      1
TIMESTAMP                    1336 .000748503 NONE                      1
STATUS                          2         .5 NONE                      1
TEMPORARY                       2         .5 NONE                      1
GENERATED                       2         .5 NONE                      1
SECONDARY                       2         .5 NONE                      1
NAMESPACE                      21 .047619048 NONE                      1
EDITION_NAME                    0          0 NONE                      0
15 rows selected.

--估计'Z'=>'FOR ALL COLUMNS SIZE AUTO'.

3.最常见的错误,就是少写ALL,写成了Method_Opt => 'Method_Opt => 'FOR COLUMNS SIZE 1',这样并不会删除直方图.

SCOTT@book> execute sys.dbms_stats.gather_table_stats ( OwnName => user,TabName => 't',Method_Opt => 'FOR COLUMNS SIZE 1',Cascade => True ,No_Invalidate => false)
PL/SQL procedure successfully completed.

SCOTT@book> select column_name, num_distinct, DENSITY,histogram,NUM_BUCKETS from dba_tab_columns where table_name='T' and owner=user;
COLUMN_NAME          NUM_DISTINCT    DENSITY HISTOGRAM       NUM_BUCKETS
-------------------- ------------ ---------- --------------- -----------
OWNER                          29 5.6432E-06 FREQUENCY                23
OBJECT_NAME                 52164  .00001917 NONE                      1
SUBOBJECT_NAME                149  .00094518 FREQUENCY               149
OBJECT_ID                   86946 .000011501 NONE                      1
DATA_OBJECT_ID               9044 .000110571 NONE                      1
OBJECT_TYPE                    46 5.6432E-06 FREQUENCY                32
CREATED                      1036 .002824859 HEIGHT BALANCED         254
LAST_DDL_TIME                1307 .000765111 NONE                      1
TIMESTAMP                    1336 .000748503 NONE                      1
STATUS                          2         .5 NONE                      1
TEMPORARY                       2         .5 NONE                      1
GENERATED                       2         .5 NONE                      1
SECONDARY                       2         .5 NONE                      1
NAMESPACE                      21 .047619048 NONE                      1
EDITION_NAME                    0          0 NONE                      0
15 rows selected.

--可以发现直方图信息不会删除.

4.另外一个错误是写成如下,例子:
Method_Opt => 'FOR COLUMNS owner,object_name SIZE 10'

SCOTT@book> execute sys.dbms_stats.gather_table_stats ( OwnName => user,TabName => 't',Method_Opt => 'FOR COLUMNS owner,object_name SIZE 10',Cascade => True ,No_Invalidate => false)
PL/SQL procedure successfully completed.

SCOTT@book> select column_name, num_distinct, DENSITY,histogram,NUM_BUCKETS from dba_tab_columns where table_name='T' and owner=user;
COLUMN_NAME          NUM_DISTINCT    DENSITY HISTOGRAM       NUM_BUCKETS
-------------------- ------------ ---------- --------------- -----------
OWNER                          29 5.7092E-06 FREQUENCY                24
OBJECT_NAME                 52164 .000031083 HEIGHT BALANCED          10
SUBOBJECT_NAME                149  .00094518 FREQUENCY               149
OBJECT_ID                   86946 .000011501 NONE                      1
DATA_OBJECT_ID               9044 .000110571 NONE                      1
OBJECT_TYPE                    46 5.6432E-06 FREQUENCY                32
CREATED                      1036 .002824859 HEIGHT BALANCED         254
LAST_DDL_TIME                1307 .000765111 NONE                      1
TIMESTAMP                    1336 .000748503 NONE                      1
STATUS                          2         .5 NONE                      1
TEMPORARY                       2         .5 NONE                      1
GENERATED                       2         .5 NONE                      1
SECONDARY                       2         .5 NONE                      1
NAMESPACE                      21 .047619048 NONE                      1
EDITION_NAME                    0          0 NONE                      0
15 rows selected.

--可以发现bucket的数量不对.写成如下更加明确:
SCOTT@book> execute sys.dbms_stats.gather_table_stats ( OwnName => user,TabName => 't',Method_Opt => 'FOR COLUMNS owner,object_name SIZE 1',Cascade => True ,No_Invalidate => false)
PL/SQL procedure successfully completed.

SCOTT@book> select column_name, num_distinct, DENSITY,histogram,NUM_BUCKETS from dba_tab_columns where table_name='T' and owner=user;
COLUMN_NAME          NUM_DISTINCT    DENSITY HISTOGRAM       NUM_BUCKETS
-------------------- ------------ ---------- --------------- -----------
OWNER                          29 5.7486E-06 FREQUENCY                22
OBJECT_NAME                 52164  .00001917 NONE                      1
SUBOBJECT_NAME                149  .00094518 FREQUENCY               149
OBJECT_ID                   86946 .000011501 NONE                      1
DATA_OBJECT_ID               9044 .000110571 NONE                      1
OBJECT_TYPE                    46 5.6432E-06 FREQUENCY                32
CREATED                      1036 .002824859 HEIGHT BALANCED         254
LAST_DDL_TIME                1307 .000765111 NONE                      1
TIMESTAMP                    1336 .000748503 NONE                      1
STATUS                          2         .5 NONE                      1
TEMPORARY                       2         .5 NONE                      1
GENERATED                       2         .5 NONE                      1
SECONDARY                       2         .5 NONE                      1
NAMESPACE                      21 .047619048 NONE                      1
EDITION_NAME                    0          0 NONE                      0
15 rows selected.

--owner 字段的bucket数量不是1.当然这种错误不常见,一般建立直方图我会选择254.
SCOTT@book> execute sys.dbms_stats.gather_table_stats ( OwnName => user,TabName => 't',Method_Opt => 'FOR COLUMNS owner,object_name SIZE 254',Cascade => True ,No_Invalidate => false)
PL/SQL procedure successfully completed.

SCOTT@book> select column_name, num_distinct, DENSITY,histogram,NUM_BUCKETS from dba_tab_columns where table_name='T' and owner=user;
COLUMN_NAME          NUM_DISTINCT    DENSITY HISTOGRAM       NUM_BUCKETS
-------------------- ------------ ---------- --------------- -----------
OWNER                          29 .000005758 FREQUENCY                23
OBJECT_NAME                 52164 .000031516 HEIGHT BALANCED         254
SUBOBJECT_NAME                149  .00094518 FREQUENCY               149
OBJECT_ID                   86946 .000011501 NONE                      1
DATA_OBJECT_ID               9044 .000110571 NONE                      1
OBJECT_TYPE                    46 5.6432E-06 FREQUENCY                32
CREATED                      1036 .002824859 HEIGHT BALANCED         254
LAST_DDL_TIME                1307 .000765111 NONE                      1
TIMESTAMP                    1336 .000748503 NONE                      1
STATUS                          2         .5 NONE                      1
TEMPORARY                       2         .5 NONE                      1
GENERATED                       2         .5 NONE                      1
SECONDARY                       2         .5 NONE                      1
NAMESPACE                      21 .047619048 NONE                      1
EDITION_NAME                    0          0 NONE                      0
15 rows selected.

5.比较正确的写法是:

Method_Opt => 'FOR COLUMNS SIZE 10 owner, OBJECT_NAME'
或者
Method_Opt => 'FOR COLUMNS SIZE 10 owner for columnssize 10 OBJECT_NAME'

SCOTT@book> execute sys.dbms_stats.gather_table_stats ( OwnName => user,TabName => 't',Method_Opt =>  'FOR COLUMNS SIZE 10 owner , OBJECT_NAME',Cascade => True ,No_Invalidate => false)
PL/SQL procedure successfully completed.
或者
SCOTT@book> execute sys.dbms_stats.gather_table_stats ( OwnName => user,TabName => 't',Method_Opt => 'FOR COLUMNS SIZE 10 owner for columns size 10 OBJECT_NAME',Cascade => True ,No_Invalidate => false)
PL/SQL procedure successfully completed.

SCOTT@book> select column_name, num_distinct, DENSITY,histogram,NUM_BUCKETS from dba_tab_columns where table_name='T' and owner=user;
COLUMN_NAME          NUM_DISTINCT    DENSITY HISTOGRAM       NUM_BUCKETS
-------------------- ------------ ---------- --------------- -----------
OWNER                          29 .023255814 HEIGHT BALANCED          10
OBJECT_NAME                 52164 .000031943 HEIGHT BALANCED          10
SUBOBJECT_NAME                149  .00094518 FREQUENCY               149
OBJECT_ID                   86946 .000011501 NONE                      1
DATA_OBJECT_ID               9044 .000110571 NONE                      1
OBJECT_TYPE                    46 5.6432E-06 FREQUENCY                32
CREATED                      1036 .002824859 HEIGHT BALANCED         254
LAST_DDL_TIME                1307 .000765111 NONE                      1
TIMESTAMP                    1336 .000748503 NONE                      1
STATUS                          2         .5 NONE                      1
TEMPORARY                       2         .5 NONE                      1
GENERATED                       2         .5 NONE                      1
SECONDARY                       2         .5 NONE                      1
NAMESPACE                      21 .047619048 NONE                      1
EDITION_NAME                    0          0 NONE                      0
15 rows selected.

时间: 2024-09-14 23:52:19

[20160516]统计分析参数method_opt.txt的相关文章

[20171105]exp imp buffer参数解析.txt

[20171105]exp imp buffer参数解析.txt oracle官方所给的关于buffer的解释如下: https://docs.oracle.com/cd/A84870_01/doc/server.816/a76955/ch01.htm BUFFER Default: operating system-dependent. See your Oracle operating system-specific documentation to determine the defaul

[20130528]dbms_stats.gather_table_stats的method_opt.txt

[20130528]dbms_stats.gather_table_stats的method_opt.txt 同事想删除某个表的直方图信息,结果老是删除不掉.问我,我看了一下,马上明白使用参数错误,他使用的是method_opt=>'for columns size 1'.缺少了all参数.应该写成method_opt=>'for all columns size 1'. 实际上这个问题我以前做一些测试的时候我就发现,一直没有好好的总结.找个机会总结一下. 1.测试环境: SQL> @v

[20171117]参数filesystemio_options.txt

[20171117]参数filesystemio_options.txt --//前几天看别人的awr报表发现设置参数filesystemio_options=setall,问为什么?对方给出一个链接,某某人都是这样设置的, --//自己很无语,我希望对方能提出自己的见解. --//首先给出oracle官方的解析: https://docs.oracle.com/cd/E11882_01/server.112/e41573/os.htm#PFGRF94410 9.1.1.2 FILESYSTEM

[20171109]查看隐含参数脚本.txt

[20171109]查看隐含参数脚本.txt --//查看隐含参数的脚本,今天没事修改一下增加查询description字段的内容.也有网友要求提供这个脚本,实际上这些脚本都是自己工作 --//中不断收集整理.网上许多地方都能找到. $ cat hide.sql col name format a40 col description format a66 col session_value format a22 col default_value format a22 col system_va

[20170516]11G use_large_pages参数2.txt

[20170516]11G use_large_pages参数2.txt //前面我提到如果设置use_large_pages=auto.设置页面大小不足时,oracle会oradism经常修改内核参数vm.nr_hugepages. //忘记测试是否在退出后可以收回.链接如下: http://blog.itpub.net/267265/viewspace-2135210/ --//不知道什么回事,以前写的,忘记发了,补上. 1.环境 SYS@book> @ &r/ver1 PORT_STR

[20151021]理解dbms_xplan.display_cursor的format参数all.txt

[20151021]理解dbms_xplan.display_cursor的format参数all.txt --今天才理解dbms_xplan.display_cursor的format参数all,看来看书与看文档不够仔细. --我一般看执行计划使用我自己的脚本: $ cat dpcz.sql set verify off --select * from table(dbms_xplan.display_cursor(NVL('&1',NULL),NULL,'ALLSTATS LAST PEEK

[20151208]隐含参数_trace_pin_time.txt

[20151208]隐含参数_trace_pin_time.txt --使用隐含参数可以trace how long a current pin is held,作为测试与学习了解oracle内部相关知识. --自己测试看看. 1.测试环境: SYS@book> @ &r/ver1 PORT_STRING                    VERSION        BANNER ------------------------------ -------------- -------

[20150325]关于参数archive_lag_target.txt

[20150325]关于参数archive_lag_target.txt --今天同事在测试设置参数archive_lag_target遇到一些问题,自己也做一些测试: DGMGRL>  show database test ArchiveLagTarget   ArchiveLagTarget = '0' DGMGRL> edit database test set PROPERTY ArchiveLagTarget=30; Error: ORA-16790: the value of th

[20151201]统计分析与GRD.txt

[20151201]统计分析与GRD.txt --上午测试了手工实现资源掌控.下午看看那个对象出现REMASTER_CNT次数最多. 1.环境: SYS@xxxx1> @ &r/ver1 PORT_STRING                    VERSION        BANNER ------------------------------ -------------- -------------------------------------------------------