随锐旗下互动传媒:

Oracle 11g R1中的统计收集增强

http://www.weaseek.com  2008-08-13 09:26:50  来源:51cto

表达式统计

优化器对应用到列上的操作带来的影响一无所知,使用一种类似于多列统计的方法,我们可以收集到表达式统计数据。

可以使用存储过程CREATE_EXTENDED_STATS明确地进行创建,或利用GATHER_%存储过程进行数据统计时,在METHOD_OPT参数中指定表达式进行间接创建。

DECLARE l_cg_name VARCHAR2(30);BEGIN -- Explicitly created. l_cg_name := DBMS_STATS.create_extended_stats(ownname => 'SCOTT', tabname => 'EMP', extension => '(LOWER(ENAME))'); -- Implicitly created. DBMS_STATS.gather_table_stats( 'SCOTT', 'EMP', method_opt => 'for columns (upper(ename))');END;/

将METHOD_OPT参数设置为“FOR ALL COLUMNS SIZE AUTO”允许对现有的表达式进行数据统计。

BEGIN DBMS_STATS.gather_table_stats( 'SCOTT', 'EMP', method_opt => 'for all columns size auto');END;/

[DBA|ALL|USER]_STAT_EXTENSIONS视图显示了关于表达式统计的信息,与多列统计一样。

COLUMN extension FORMAT A30SELECT extension_name, extensionFROM dba_stat_extensionsWHERE table_name = 'EMP';EXTENSION_NAME EXTENSION------------------------------ ------------------------------SYS_STU3VG629OEYG6FN0EKTGV_HQ6 ("JOB","DEPTNO")SYS_STULPA1A#B6YL4KQ59DQO3OADQ ("JOB","MGR")SYS_STU2JLSDWQAFJHQST7$QK81_YB (LOWER("ENAME"))SYS_STUOK75YSL165W#_X8GUYL0A1X (UPPER("ENAME"))4 rows selected.SQL>COLUMN col_group FORMAT A30SELECT e.extension col_group, t.num_distinct, t.histogramFROM dba_stat_extensions e JOIN dba_tab_col_statistics t ON e.extension_name=t.column_nameAND t.table_name = 'EMP';COL_GROUP NUM_DISTINCT HISTOGRAM------------------------------ ------------ ---------------("JOB","DEPTNO") 9 NONE("JOB","MGR") 8 NONE(LOWER("ENAME")) 14 NONE(UPPER("ENAME")) 14 NONE4 rows selected.SQL>

表达式统计使用DROP_EXTENDED_STATS存储过程进行删除。

-- Drop the columnn group.BEGIN dbms_stats.drop_extended_stats(ownname => 'SCOTT', tabname => 'EMP', extension => '(UPPER(ENAME))');END;/PL/SQL procedure successfully completed.SQL>

对分区对象的统计增强

Oracle 11g也包括了对分区对象统计的改进,未修改过的分区不会重新扫描,这样在大表上收集统计信息时的速度显著提高了,大表上往往包含有部分静态分区数据,分区交换载入(PEL)被用于往表中统计数据,只有新加入到分区中数据才会被扫描,以更新统计数据。

[作者:黄永兵]

[责任编辑:梧桐]热门关键词: Oracle 11g 数据库