Oracle数据库统计信息收集:dbms_stats包的使用说明书

Oracle数据库统计信息收集: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。

Sql代码    收藏代码
  1. PROCEDURE GATHER_TABLE_STATS  
  2. 参数名称 类型 输入/输出默认值?  
  3. ------------------------------ ----------------------- ------ --------  
  4. OWNNAME VARCHAR2 IN  
  5. TABNAME VARCHAR2 IN  
  6. PARTNAME VARCHAR2 IN DEFAULT  
  7. ESTIMATE_PERCENT NUMBER IN DEFAULT  
  8. BLOCK_SAMPLE BOOLEAN IN DEFAULT  
  9. METHOD_OPT VARCHAR2 IN DEFAULT  
  10. DEGREE NUMBER IN DEFAULT  
  11. GRANULARITY VARCHAR2 IN DEFAULT  
  12. CASCADE BOOLEAN IN DEFAULT  
  13. STATTAB VARCHAR2 IN DEFAULT  
  14. STATID VARCHAR2 IN DEFAULT  
  15. STATOWN VARCHAR2 IN DEFAULT  
  16. NO_INVALIDATE BOOLEAN IN DEFAULT  
  17.   
  18.   
  19. PROCEDURE GATHER_INDEX_STATS  
  20. 参数名称 类型 输入/输出默认值  
  21. ------------------------------ ----------------------- ------ --------  
  22. OWNNAME VARCHAR2 IN  
  23. INDNAME VARCHAR2 IN  
  24. PARTNAME VARCHAR2 IN DEFAULT  
  25. ESTIMATE_PERCENT NUMBER IN DEFAULT  
  26. STATTAB VARCHAR2 IN DEFAULT  
  27. STATID VARCHAR2 IN DEFAULT  
  28. STATOWN VARCHAR2 IN DEFAULT  
  29. DEGREE NUMBER IN DEFAULT  
  30. GRANULARITY VARCHAR2 IN DEFAULT  
  31. NO_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代码    收藏代码
  1. sql> exec dbms_stats.create_stat_table(ownname => 'scott',stattab => 'stat_table') ;  


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

Sql代码    收藏代码
  1. sql> exec dbms_stats.export_schema_stats(ownname => 'scott',stattab => 'stat_table') ;   


--分析scheme

Sql代码    收藏代码
  1. Exec dbms_stats.gather_schema_stats(   
  2. ownname => 'scott',   
  3. options => 'GATHER AUTO',   
  4. estimate_percent => dbms_stats.auto_sample_size,   
  5. method_opt => 'for all indexed columns ',   
  6. degree => 6 )   


--分析表

Sql代码    收藏代码
  1. sql> exec dbms_stats.gather_table_stats(ownname => 'scott',tabname => 'work_list',estimate_percent => 10,method_opt=> 'for all indexed columns') ;   


--分析索引

Sql代码    收藏代码
  1. SQL> exec dbms_stats.gather_index_stats(ownname => 'crm2',indname => 'IDX_ADM_PERMISSION_PID_MID',estimate_percent => '10',degree => '4') ;  


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

Sql代码    收藏代码
  1. SQL>dbms_stats.delete_table_stats(ownname => 'scott',tabname => 'work_list') ;  


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

Sql代码    收藏代码
  1. sql> exec dbms_stats.import_table_stats(ownname => 'scott',tabname => 'work_list',stattab => 'stat_table') ;   


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

Sql代码    收藏代码
  1. sql> exec dbms_stats.import_schema_stats(ownname => 'scott',stattab => 'stat_table');  


--导入索引的统计信息

Sql代码    收藏代码
  1. SQL> exec dbms_stats.import_index_stats(ownname => 'crm2',indname => 'IDX_ADM_PERMISSION_PID_MID',stattab => 'stat_table')   


--检查是否导入成功

Sql代码    收藏代码
  1. SQL> select table_name,num_rows,a.blocks,a.last_analyzed from all_tables a where a.table_name='WORK_LIST';  

你可能感兴趣的:(Oracle,优化)