–检查对表的上次分析时间,可以看到返回空值,即一直都未分析过。
hejianmin@ORALOCAL(10.203.1.23)> select to_char(LAST_ANALYZED,’yyyymmdd hh24:mi:ss’) from user_tables where lower(table_name)=’hjm_test_hash’;
TO_CHAR(LAST_ANAL
—————–
已用时间: 00: 00: 00.03
–用dbms包进行分析
hejianmin@ORALOCAL(10.203.1.23)> EXEC DBMS_STATS.GATHER_TABLE_STATS(OWNNAME=>’HEJIANMIN’,TABNAME=>’HJM_TEST_HASH’,ESTIMATE_PERCENT=>10);
PL/SQL过程已成功完成。
已用时间: 00: 00: 09.08
–检查分析时间
hejianmin@ORALOCAL(10.203.1.23)> select to_char(LAST_ANALYZED,’yyyymmdd hh24:mi:ss’) from user_tables where lower(table_name)=’hjm_test_hash’;
TO_CHAR(LAST_ANAL
—————–
20070408 01:57:50
已用时间: 00: 00: 00.03
–发现确实分析过了,有上上回分析时间。
–接着,我们进一步把分析的信息导出备份,以防止下次需要将分析的信息导回。首先建立导出分析信息的备份表:也是利用了DBMS_STATS.CREATE_STAT_TABLE.
hejianmin@ORALOCAL(10.203.1.23)> EXEC DBMS_STATS.CREATE_STAT_TABLE(‘HEJIANMIN’,’HJM_COLLECT_STAT_TAB’);
PL/SQL过程已成功完成。
已用时间: 00: 00: 01.03
–导出分析信息到HJM_COLLECT_STAT_TAB表
hejianmin@ORALOCAL(10.203.1.23)> EXEC DBMS_STATS.EXPORT_TABLE_STATS(OWNNAME=>’HEJIANMIN’,TABNAME=>’HJM_TEST_HASH’,STATTAB=>’HJM_COLLECT_STAT_TAB’);
PL/SQL过程已成功完成。
已用时间: 00: 00: 00.02
–删除分析信息
hejianmin@ORALOCAL(10.203.1.23)> EXEC DBMS_STATS.DELETE_TABLE_STATS(OWNNAME=>’HEJIANMIN’,TABNAME=>’HJM_TEST_HASH’);
PL/SQL过程已成功完成。
已用时间: 00: 00: 01.00
–检查是否还存在分析信息:
hejianmin@ORALOCAL(10.203.1.23)> select to_char(LAST_ANALYZED,’yyyymmdd hh24:mi:ss’) from user_tables where lower(table_name)=’hjm_test_hash’;
TO_CHAR(LAST_ANAL
—————–
已用时间: 00: 00: 00.00
–再次分析
hejianmin@ORALOCAL(10.203.1.23)> EXEC DBMS_STATS.GATHER_TABLE_STATS(OWNNAME=>’HEJIANMIN’,TABNAME=>’HJM_TEST_HASH’,ESTIMATE_PERCENT=>10);
PL/SQL过程已成功完成。
已用时间: 00: 00: 09.03
–检查分析时间,为再次分析的时间。
hejianmin@ORALOCAL(10.203.1.23)> select to_char(LAST_ANALYZED,’yyyymmdd hh24:mi:ss’) from user_tables where lower(table_name)=’hjm_test_hash’;
TO_CHAR(LAST_ANAL
—————–
20070408 02:01:59
已用时间: 00: 00: 00.00
–发现再次分析的信息不能很好的指导执行计划,还是再次分析前的执行计划效率高,还原分析信息。
hejianmin@ORALOCAL(10.203.1.23)> EXEC DBMS_STATS.IMPORT_TABLE_STATS(OWNNAME=>’HEJIANMIN’,TABNAME=>’HJM_TEST_HASH’,STATTAB=>’HJM_COLLECT_STAT_TAB’);
PL/SQL过程已成功完成。
已用时间: 00: 00: 00.02
–检查,分析信息已经还原。时间点为上次的分析时间。
hejianmin@ORALOCAL(10.203.1.23)> select to_char(LAST_ANALYZED,’yyyymmdd hh24:mi:ss’) from user_tables where lower(table_name)=’hjm_test_hash’;
TO_CHAR(LAST_ANAL
—————–
20070408 01:57:50
已用时间: 00: 00: 00.01