【实验】【analyze】分析特定用户的表和索引

1.使用analyze方法对特定用户的表和索引进行分析脚本如下
ora10g@testdb183 /home/oracle$ cat analyze_schema.sql
set pagesize 6000
set heading off
spool analytab.sql
select 'analyze table '||table_name||' estimate statistics sample 20 percent;' from user_tables;
spool off
spool analyind.sql
select 'analyze table '||table_name||' estimate statistics sample 20 percent for all indexes;' from user_tables;
spool off
spool analyze.log
@analytab.sql
@analyind.sql
spool off

2.使用方法,进入到sqlplus界面
ora10g@testdb183 /home/oracle$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.3.0 - Production on Sat Aug 29 20:16:29 2009

Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP and Data Mining Scoring Engine options

3.连接到待分析的用户,这里是sec用户
sys@ora10g> conn sec/sec
Connected.

4.使用“@”符号调用上面的analyze_schema.sql脚本,执行过程如下(这个用户下只有两张表)
sec@ora10g> @analyze_schema.sql

analyze table T_PARENT estimate statistics sample 20 percent;
analyze table T_CHILD estimate statistics sample 20 percent;


analyze table T_PARENT estimate statistics sample 20 percent for all indexes;
analyze table T_CHILD estimate statistics sample 20 percent for all indexes;


Table analyzed.


Table analyzed.


Table analyzed.


Table analyzed.

sec@ora10g>

5.上面的脚本使用的是analyze方法进行分析的,analyze方法不支持“并行”操作,下面演示一下使用dbms_stats.gather_schema_stats方法使用4并行对sec用户的10%数据进行分析的过程。
sec@ora10g> exec dbms_stats.gather_schema_stats(OWNNAME=>'SEC',ESTIMATE_PERCENT=>10,DEGREE=>4,cascade=>true);

PL/SQL procedure successfully completed.

如果想对SEC用户中所有表使用 DBMS_STATS.GATHER_TABLE_STATS方法进行 分析,可以参考如下我写的一个SQL语句(所有能节省DBA宝贵时间的尝试都应该被鼓励):
SET lin 300
SET head off
SELECT    'execute DBMS_STATS.GATHER_TABLE_STATS(ownname=>'
       || ''''
       || owner
       || ''''
       || ',tabname=>'
       || ''''
       || table_name
       || ''''
       || ',method_opt=>'
       || ''''
       || 'FOR ALL COLUMNS SIZE 254'
       || ''''
       || ',DEGREE=>4,cascade=>true);'
  FROM dba_tables
 WHERE dba_tables.owner = 'SEC';

6.小结
对表和索引的定期分析有利于Oracle的CBO得到正确的执行计划,提高系统的性能。是DBA日常维护中必做的内容。
analyze和dbms_stats两种方法都可以完成分析的任务,如果在资源可用,并且待分析数据较大的情况下可以考虑使用dbms_stats加并行的方法进行处理。

上面只是演示了一种非常简单的用法,更多的analyze方法请参考Oracle官方文档《ANALYZE》http://download.oracle.com/docs/cd/B10501_01/server.920/a96540/statements_46a.htm#SQLRF01105


更多的DBMS_STATS方法,请参考Oracle官方文档《103  DBMS_STATS》http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_stats.htm#CIHBIEII


-- The End --

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/519536/viewspace-613551/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/519536/viewspace-613551/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值