DBMS_STATS包的一些研究

–检查对表的上次分析时间,可以看到返回空值,即一直都未分析过。

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

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注