首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

dbms_stats包的使用仿单

2012-09-01 
dbms_stats包的使用说明书dbms_stats包下面一共有40多个存储过程. 对执行计划的生成非常重要。常见的有:分

dbms_stats包的使用说明书

    dbms_stats包下面一共有40多个存储过程. 对执行计划的生成非常重要。常见的有:

    分析数据库(包括所有的用户对象和系统对象):gather_database_stats 
    分析用户所有的对象(包括表、索引、簇):gather_schema_stats
    分析表:gather_table_stats
    分析索引:gather_index_stats 
    删除数据库统计信息:delete_database_stats
    删除用户方案统计信息:delete_schema_stats
    删除表统计信息:delete_table_stats 
    删除索引统计信息:delete_index_stats
    删除列统计信息:delete_column_stats 
    设置表统计信息:set_table_stats
    设置索引统计信息:set_index_stats
    设置列统计信息:set_column_stats 

    可以查看表 DBA_TABLES来查看表是否与被分析过,如:

    SELECT TABLE_NAME, LAST_ANALYZED FROM DBA_TABLES

    通常使用的比较多的主要是DBMS_STATS.GATHER_TABLE_STATS和 DBMS_STATS.GATHER_INDEX_STATS。

PROCEDURE GATHER_TABLE_STATS参数名称 类型 输入/输出默认值?------------------------------ ----------------------- ------ --------OWNNAME VARCHAR2 INTABNAME VARCHAR2 INPARTNAME VARCHAR2 IN DEFAULTESTIMATE_PERCENT NUMBER IN DEFAULTBLOCK_SAMPLE BOOLEAN IN DEFAULTMETHOD_OPT VARCHAR2 IN DEFAULTDEGREE NUMBER IN DEFAULTGRANULARITY VARCHAR2 IN DEFAULTCASCADE BOOLEAN IN DEFAULTSTATTAB VARCHAR2 IN DEFAULTSTATID VARCHAR2 IN DEFAULTSTATOWN VARCHAR2 IN DEFAULTNO_INVALIDATE BOOLEAN IN DEFAULTPROCEDURE GATHER_INDEX_STATS参数名称 类型 输入/输出默认值------------------------------ ----------------------- ------ --------OWNNAME VARCHAR2 ININDNAME VARCHAR2 INPARTNAME VARCHAR2 IN DEFAULTESTIMATE_PERCENT NUMBER IN DEFAULTSTATTAB VARCHAR2 IN DEFAULTSTATID VARCHAR2 IN DEFAULTSTATOWN VARCHAR2 IN DEFAULTDEGREE NUMBER IN DEFAULTGRANULARITY VARCHAR2 IN DEFAULTNO_INVALIDATE BOOLEAN IN DEFAULT

    

    注释:

    ownname:要分析表的拥有者

    tabname:要分析的表名.

    partname:分区的名字,只对分区表或分区索引有用.

    estimate_percent:这个参数相当于analyze中的"estimate statistics sample x percent".为总行数的百分比来估算.如果该参数为空.则为compute,当然也可以使用DBMS_STATS.AUTO_SAMPLE_SIZE 让oracle 来决定估算百分比数

    block_sample:该参数是一个boolean.在决定是否进行随机采样.

    method_opt :该参数表明数据颁布不均衡的情况下是否使用直方图。可选值为"for all columns 或者for all indexed columns.当然也可以使用auto.让oracle来决定收集

    degree     :parallel degree(并行收集维度) 看CPU个数

    cascade :决定是否收集相关表的索引的统计信息.

    force:即使表锁住了也收集统计信息.

 

    案例:

    --创建统计信息历史保留表 

sql> exec dbms_stats.create_stat_table(ownname => 'scott',stattab => 'stat_table') ;


    --导出整个scheme的统计信息 

sql> exec dbms_stats.export_schema_stats(ownname => 'scott',stattab => 'stat_table') ; 


    --分析scheme

Exec dbms_stats.gather_schema_stats( ownname => 'scott', options => 'GATHER AUTO', estimate_percent => dbms_stats.auto_sample_size, method_opt => 'for all indexed columns ', degree => 6 ) 


    --分析表

sql> exec dbms_stats.gather_table_stats(ownname => 'scott',tabname => 'work_list',estimate_percent => 10,method_opt=> 'for all indexed columns') ; 


    --分析索引

SQL> exec dbms_stats.gather_index_stats(ownname => 'crm2',indname => 'IDX_ADM_PERMISSION_PID_MID',estimate_percent => '10',degree => '4') ;


    --如果发现执行计划走错,删除表的统计信息

SQL>dbms_stats.delete_table_stats(ownname => 'scott',tabname => 'work_list') ;


    --导入表的历史统计信息

sql> exec dbms_stats.import_table_stats(ownname => 'scott',tabname => 'work_list',stattab => 'stat_table') ; 


    --如果进行分析后,大部分表的执行计划都走错,需要导回整个scheme的统计信息

sql> exec dbms_stats.import_schema_stats(ownname => 'scott',stattab => 'stat_table');


    --导入索引的统计信息

SQL> exec dbms_stats.import_index_stats(ownname => 'crm2',indname => 'IDX_ADM_PERMISSION_PID_MID',stattab => 'stat_table') 


    --检查是否导入成功

SQL> select table_name,num_rows,a.blocks,a.last_analyzed from all_tables a where a.table_name='WORK_LIST';


 


   

 

热点排行