[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;
[20230818]关于修改字段统计信息问题.txt
来源:这里教程网
时间:2026-03-03 18:58:25
作者:
编辑推荐:
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 直播、AI赋能,美团披着荆棘前行
直播、AI赋能,美团披着荆棘前行
26-03-03 - Oracle 11.2.0.4 创建普通表,区及段默认是否会分配
Oracle 11.2.0.4 创建普通表,区及段默认是否会分配
26-03-03 - 数据库 SQL执行时长
数据库 SQL执行时长
26-03-03 - 数据库内存交换异常 故障报告
数据库内存交换异常 故障报告
26-03-03 - 大模型加持,讯飞智能办公本X3助办公效率再提速
大模型加持,讯飞智能办公本X3助办公效率再提速
26-03-03 - 从线上化走向智能化,数字办公助力企业实现"效率+安全”双提升|爱分析报告
从线上化走向智能化,数字办公助力企业实现"效率+安全”双提升|爱分析报告
26-03-03 - enq:TX – row lock contention产生原因及处理脚本
- Oracle 11G 区管理方式
Oracle 11G 区管理方式
26-03-03 - VMware Workstation RAC共享磁盘与心跳配置
VMware Workstation RAC共享磁盘与心跳配置
26-03-03 - 在大有可为的即时零售赛道上,达达集团迈上了盈利台阶
在大有可为的即时零售赛道上,达达集团迈上了盈利台阶
26-03-03
