[20230818]关于修改字段统计信息问题.txt

来源:这里教程网 时间:2026-03-03 18:58:25 作者:

[20230818]关于修改字段统计信息问题.txt --//[20221216]建立修改表字段统计信息modcol.sql脚本.txt =>http://blog.itpub.net/267265/viewspace-2932708/ --//如果修改字段一些信息可能导致对应字段的直方图信息破坏,要小心这类修改操作,我忽略这个细节。 1.环境: SCOTT@test01p> @ver1 PORT_STRING          VERSION    BANNER                                                                               CON_ID -------------------- ---------- -------------------------------------------------------------------------------- ---------- IBMPC/WIN_NT64-9.1.0 12.2.0.1.0 Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production              0 2.建立测试表: SCOTT@test01p> create table t as select rownum id , cast(dbms_random.string('a',6 ) as varchar2(10)) name from dual connect by level <=1e5; Table created. SCOTT@test01p> @ pk t id create unique index pk_t on t (id); alter table t add constraint pk_t primary key (id); -- alter table t modify constraint pk_t disable; -- alter table t drop constraint PK_t; -- drop index pk_t; Index created. Table altered. SCOTT@test01p> @ gts t 254 '' @ gts table_name  <method_opt> <estimate_percent> method_opt accept  R or r  => REPEAT , A or a => auto estimate_percent accept "" => NULL , AUTO or A or auto or a=> sys.dbms_stats.auto_sample_size Gather Table Statistics for table t... exec dbms_stats.gather_table_stats('SCOTT', 'T', estimate_percent => NULL, method_opt=>'FOR TABLE FOR ALL COLUMNS SIZE 254', cascade=>true, no_invalidate=>false) if lock table t, add force=>true. press ctrl+c cancel, enter continue... PL/SQL procedure successfully completed. SCOTT@test01p> @ desczz t '' eXtended describe of t DISPLAY TABLE_NAME OF COLUMN_NAME INFORMATION. INPUT   OWNER.TABLE_NAME  <filters> SAMPLE  : @ desczz TABLE_NAME column_name1,column_name2 IF NOT INPUT <filters> ,USE "" . Owner Table_Name SAMPLE_SIZE LAST_ANALYZED       Col# Column Name Null?      Type         NUM_DISTINCT        Density  NUM_NULLS HISTOGRAM       NUM_BUCKETS Low_value High_value ----- ---------- ----------- ------------------- ---- ----------- ---------- ------------ ------------ -------------- ---------- --------------- ----------- --------- ---------- SCOTT T               100000 2023-08-18 21:37:35    1 ID          NOT NULL   NUMBER(,)          100000   .00001000000          0 HYBRID                  254 1         100000                       100000 2023-08-18 21:37:35    2 NAME                   VARCHAR2(10)       100000   .00001000000          0 HYBRID                  254 AAAFHY    zzzdjE SCOTT@test01p> @ modcol t name density .00001100000 input argument list : owner.table_name column_name column_stat_attribute value column_stat_attribute = density distcnt nullcnt avgclen @desc_proc sys dbms_stats set_column_stats exec dbms_stats.SET_COLUMN_STATS('SCOTT','T','name',density=>.00001100000,NO_INVALIDATE=>false,force=>true); press enter to continue ... PL/SQL procedure successfully completed. SCOTT@test01p> @ desczz t '' eXtended describe of t DISPLAY TABLE_NAME OF COLUMN_NAME INFORMATION. INPUT   OWNER.TABLE_NAME  <filters> SAMPLE  : @ desczz TABLE_NAME column_name1,column_name2 IF NOT INPUT <filters> ,USE "" . Owner      Table_Name SAMPLE_SIZE LAST_ANALYZED       Col# Column Name Null?      Type         NUM_DISTINCT        Density  NUM_NULLS HISTOGRAM       NUM_BUCKETS Low_value High_value ---------- ---------- ----------- ------------------- ---- ----------- ---------- ------------ ------------ -------------- ---------- --------------- ----------- --------- ---------- SCOTT      T               100000 2023-08-18 21:37:35    1 ID          NOT NULL   NUMBER(,)          100000   .00001000000          0 HYBRID                  254 1         100000                            100000 2023-08-18 21:40:52    2 NAME                   VARCHAR2(10)       100000   .00001100000          0                           1 AAAFHY    zzzdjE --//可以发现字段NAME的Density= .00001100000已经修改,但是直方图信息完全清除了。 --//当然你可以使用这个方法清除对应字段的直方图信息。 SCOTT@test01p> @ tabhist t name COLUMN_NAME DATA_TYPE Histogram  SAMPLE_SIZE ENDPOINT_NUMBER ENDPOINT_VALUE  FREQUENCY HEIGHT_BAL ENDPOINT_ACTUAL_VALUE ----------- --------- ---------- ----------- --------------- -------------- ---------- ---------- ----------------------- NAME        VARCHAR2  NONE            100000               0   414141464858          0                       NONE            100000               1   7A7A7A646A44          1 --//可以发现name字段直方图信息已经清除。 SCOTT@test01p> @ gts t 254 '' '' Gather Table Statistics for table t... exec dbms_stats.gather_table_stats('SCOTT', 'T', estimate_percent => NULL, method_opt=>'FOR TABLE FOR ALL COLUMNS SIZE 254', cascade=>true, no_invalidate=>false) if lock table t, add force=>true. press ctrl+c cancel, enter continue... PL/SQL procedure successfully completed. SCOTT@test01p> @ tabhist t name COLUMN_NAME DATA_TYPE Histogram  SAMPLE_SIZE ENDPOINT_NUMBER ENDPOINT_VALUE  FREQUENCY HEIGHT_BAL ENDPOINT_ACTUAL_VALUE ----------- --------- ---------- ----------- --------------- -------------- ---------- ---------- -------------------------- NAME        VARCHAR2  HYBRID          100000               1   414141464858          1            AAAFHY                       HYBRID          100000             396   414B4C7A7558        396            AKLzuX                       HYBRID          100000             791   415554505870        791            AUTPXp                       HYBRID          100000            1187   4166594F4B4E       1187            AfYOKO                       HYBRID          100000            1582   41717A456572       1582            AqzEes                       HYBRID          100000            1977   424257544B78       1977            BBWTKy ....                       HYBRID          100000           98023   797855426347      98023            yxUBcH                       HYBRID          100000           98419   7A4A51787270      98419            zJQxrp                       HYBRID          100000           98814   7A554C564679      98814            zULVFz                       HYBRID          100000           99209   7A656C414A6C      99209            zelAJl                       HYBRID          100000           99604   7A6F7674786D      99604            zovtxm                       HYBRID          100000          100000   7A7A7A646A44     100000            zzzdjE 254 rows selected. --//仅仅提醒自己工作中注意这样的情况。另外今天还学习到了视图DBA_OPTSTAT_OPERATIONS记录分析统计信息的操作。 --// DBA_TAB_STATS_HISTORY  视图表统计信息的历史,它不会记录dbms_stats.set_table_stats之类的操作。 --// DBA_OPTSTAT_OPERATION_TASKS 视图记录表统计信息操作的细节。 SCOTT@test01p> @ opstat SCOTT T  1=1         ID START_TIME                 END_TIME                   OPERATION            TARGET               STATUS               NOTES ---------- -------------------------- -------------------------- -------------------- -------------------- -------------------- ------------------------------------------------------------------------------------------       5042 2023-08-03 21:24:08.706000 2023-08-03 21:24:10.759000 gather_table_stats   SCOTT.T              COMPLETED            <params><param name="block_sample" val="FALSE"/><param name="cascade" val="TRUE"/><param n                                                                                                                                 ame="concurrent" val="FALSE"/><param name="degree" val="NULL"/><param name="estimate_perce                                                                                                                                 nt" val=""/><param name="force" val="FALSE"/><param name="granularity" val="AUTO"/><param                                                                                                                                 name="method_opt" val="FOR TABLE FOR ALL COLUMNS SIZE REPEAT"/><param name="no_invalidate"                                                                                                                                  val="FALSE"/><param name="ownname" val="SCOTT"/><param name="partname" val=""/><param nam                                                                                                                                 e="reporting_mode" val="FALSE"/><param name="statid" val=""/><param name="statown" val=""/                                                                                                                                 ><param name="stattab" val=""/><param name="stattype" val="DATA"/><param name="tabname" va                                                                                                                                 l="T"/></params>       5143 2023-08-18 21:37:30.870000 2023-08-18 21:37:35.845000 gather_table_stats   SCOTT.T              COMPLETED            <params><param name="block_sample" val="FALSE"/><param name="cascade" val="TRUE"/><param n                                                                                                                                 ame="concurrent" val="FALSE"/><param name="degree" val="NULL"/><param name="estimate_perce                                                                                                                                 nt" val=""/><param name="force" val="FALSE"/><param name="granularity" val="AUTO"/><param                                                                                                                                 name="method_opt" val="FOR TABLE FOR ALL COLUMNS SIZE 254"/><param name="no_invalidate" va                                                                                                                                 l="FALSE"/><param name="ownname" val="SCOTT"/><param name="partname" val=""/><param name="                                                                                                                                 reporting_mode" val="FALSE"/><param name="statid" val=""/><param name="statown" val=""/><p                                                                                                                                 aram name="stattab" val=""/><param name="stattype" val="DATA"/><param name="tabname" val="                                                                                                                                 T"/></params>       5144 2023-08-18 21:50:57.293000 2023-08-18 21:51:01.618000 gather_table_stats   SCOTT.T              COMPLETED            <params><param name="block_sample" val="FALSE"/><param name="cascade" val="TRUE"/><param n                                                                                                                                 ame="concurrent" val="FALSE"/><param name="degree" val="NULL"/><param name="estimate_perce                                                                                                                                 nt" val=""/><param name="force" val="FALSE"/><param name="granularity" val="AUTO"/><param                                                                                                                                 name="method_opt" val="FOR TABLE FOR ALL COLUMNS SIZE 254"/><param name="no_invalidate" va                                                                                                                                 l="FALSE"/><param name="ownname" val="SCOTT"/><param name="partname" val=""/><param name="                                                                                                                                 reporting_mode" val="FALSE"/><param name="statid" val=""/><param name="statown" val=""/><p                                                                                                                                 aram name="stattab" val=""/><param name="stattype" val="DATA"/><param name="tabname" val="                                                                                                                                 T"/></params> SCOTT@test01p> @ tab2 t Show tables matching condition "t" (if schema is not specified then current user's tables only are shown)... OWNER                TABLE_NAME                     TYPE     NUM_ROWS        BLOCKS     EMPTY AVGSPC ROWLEN TAB_LAST_ANALYZED   DEGREE               COMPRESS -------------------- ------------------------------ ---- ------------ ------------- --------- ------ ------ ------------------- -------------------- -------- SCOTT                T                              TAB        100000           246         0      0     12 2023-08-18 21:51:01          1           DISABLED SCOTT@test01p> @modtab t numblks 250 input argument list : owner.table_name table_stat_attribute value table_stat_attribute = numrows numblks avgrlen @desc_proc sys dbms_stats set_table_stats exec dbms_stats.set_table_stats('SCOTT','T',numblks=>250,NO_INVALIDATE=>false,force=>true); press enter to continue ... PL/SQL procedure successfully completed. SCOTT@test01p> @ opstat SCOTT T  1=1   ID START_TIME                 END_TIME                   OPERATION            TARGET  STATUS    NOTES ---- -------------------------- -------------------------- -------------------- ------- --------- ------------------------------------------------------------------------------------------ 5042 2023-08-03 21:24:08.706000 2023-08-03 21:24:10.759000 gather_table_stats   SCOTT.T COMPLETED <params><param name="block_sample" val="FALSE"/><param name="cascade" val="TRUE"/><param n                                                                                                   ame="concurrent" val="FALSE"/><param name="degree" val="NULL"/><param name="estimate_perce                                                                                                   nt" val=""/><param name="force" val="FALSE"/><param name="granularity" val="AUTO"/><param                                                                                                   name="method_opt" val="FOR TABLE FOR ALL COLUMNS SIZE REPEAT"/><param name="no_invalidate"                                                                                                    val="FALSE"/><param name="ownname" val="SCOTT"/><param name="partname" val=""/><param nam                                                                                                   e="reporting_mode" val="FALSE"/><param name="statid" val=""/><param name="statown" val=""/                                                                                                   ><param name="stattab" val=""/><param name="stattype" val="DATA"/><param name="tabname" va                                                                                                   l="T"/></params> 5143 2023-08-18 21:37:30.870000 2023-08-18 21:37:35.845000 gather_table_stats   SCOTT.T COMPLETED <params><param name="block_sample" val="FALSE"/><param name="cascade" val="TRUE"/><param n                                                                                                   ame="concurrent" val="FALSE"/><param name="degree" val="NULL"/><param name="estimate_perce                                                                                                   nt" val=""/><param name="force" val="FALSE"/><param name="granularity" val="AUTO"/><param                                                                                                   name="method_opt" val="FOR TABLE FOR ALL COLUMNS SIZE 254"/><param name="no_invalidate" va                                                                                                   l="FALSE"/><param name="ownname" val="SCOTT"/><param name="partname" val=""/><param name="                                                                                                   reporting_mode" val="FALSE"/><param name="statid" val=""/><param name="statown" val=""/><p                                                                                                   aram name="stattab" val=""/><param name="stattype" val="DATA"/><param name="tabname" val="                                                                                                   T"/></params> 5144 2023-08-18 21:50:57.293000 2023-08-18 21:51:01.618000 gather_table_stats   SCOTT.T COMPLETED <params><param name="block_sample" val="FALSE"/><param name="cascade" val="TRUE"/><param n                                                                                                   ame="concurrent" val="FALSE"/><param name="degree" val="NULL"/><param name="estimate_perce                                                                                                   nt" val=""/><param name="force" val="FALSE"/><param name="granularity" val="AUTO"/><param                                                                                                   name="method_opt" val="FOR TABLE FOR ALL COLUMNS SIZE 254"/><param name="no_invalidate" va                                                                                                   l="FALSE"/><param name="ownname" val="SCOTT"/><param name="partname" val=""/><param name="                                                                                                   reporting_mode" val="FALSE"/><param name="statid" val=""/><param name="statown" val=""/><p                                                                                                   aram name="stattab" val=""/><param name="stattype" val="DATA"/><param name="tabname" val="                                                                                                   T"/></params> 5162 2023-08-18 22:09:31.377000 2023-08-18 22:09:31.517000 set_table_stats      SCOTT.T COMPLETED <params><param name="avgrlen" val=""/><param name="cachedblk" val=""/><param name="cachehi                                                                                                   t" val=""/><param name="flags" val=""/><param name="force" val="TRUE"/><param name="im_blo                                                                                                   ck_count" val=""/><param name="im_imcu_count" val=""/><param name="no_invalidate" val="FAL                                                                                                   SE"/><param name="numblks" val="250"/><param name="numrows" val=""/><param name="ownname"                                                                                                   val="SCOTT"/><param name="partname" val=""/><param name="scanrate" val=""/><param name="st                                                                                                   atid" val=""/><param name="statown" val=""/><param name="stattab" val=""/><param name="tab                                                                                                   name" val="T"/></params> --//set_table_stat操作也记录下来。 --//另外我的测试出现1个START_TIME=2023-08-03 21:24:08.706000,很明显这个是以前测试时建立的表,当时已经删除了。 3.测试代码: $ cat opstat.sql column start_time format a26 column end_time format a26 column notes format a90 SELECT id      , start_time      , end_time      , operation      , target          , status          , notes   FROM DBA_OPTSTAT_OPERATIONS where target = upper('&&1..&&2') and &3 order by 1;

相关推荐