oracle 定期分析表

  1. ORACLE9以后如果你想用基于成本的优化器,需要定期(每周)对数据库里的表和索引做analyze分析。
  2.  
  3.   数据库参数文件initorasid.ora里默认的优化器 optimizer_mode= choose
  4. 你要改成 optimizer_mode =first_rows (OLTP系统)
  5. optimizer_mode =all_rows (DSS 系统)
  6. 下面是一个可以在UNIX环境自动生成分析表和索引的脚本analyze.sh
  7. (sys用户的密码password要根据情况修改。)
  8. ---------------------------------------------------------------------------------------
  9. su - oracle -c "sqlplussys/password"
  10. set pages 9999
  11. set heading off
  12. set echo off
  13. set feedback off
  14. spool /oracle_backup/bin/analyze.sql;
  15. select
  16. 'analyze table '||owner||'.'||table_name||'estimate statistics sample 5000 rows;'
  17. from dba_tables
  18. where owner not in('SYS','SYSTEM','PERFSTAT');
  19. select
  20. 'analyze index '||owner||'.'||index_name||'compute statistics;'
  21. from dba_indexes
  22. where owner not in('SYS','SYSTEM','PERFSTAT');
  23. spool off;
  24. set echo on
  25. set feedback on
  26. spool /oracle_backup/log/analyze.log;
  27. @/oracle_backup/bin/analyze.sql
  28. spool off;
  29. exit;
  30. ---------------------------------------------------------------------------------------
  31. 如果你经常变动的表和索引只属于某个特定的用户(如果是test)可以把上面的
  32. owner not in('SYS','SYSTEM','PERFSTAT') 改成
  33. owner in('TEST')
  34. 来进行定期的分析。
  35. 注意事项:如果你使用的是默认的优化器(choose),一定不要定期使用上面那个analyze.sh脚本。
  36. 因为这时优化器可能更倾向于全表扫描。
  37. 如果统计分析资料不全,SQL运行时会对缺少统计资料的表进行数据采集。会大大降低SQL的执行速度。
  38. 我们要用下面这个del_analyze.sh脚本定期删除可能产生的分析结果,保证优化器按规则(rule)执行。
  39. ---------------------------------------------------------------------------------------
  40. su - oracle -c "sqlplussys/password"
  41. set pagesize9999;
  42. set linesize 120;
  43. set heading off;
  44. set echo off;
  45. set feedback off;
  46. spool/oracle_backup/bin/del_analyze.sql;
  47. select
  48. 'analyze table '||owner||'.'||table_name||'delete statistics;'
  49. from dba_tables
  50. where owner not in('SYS','SYSTEM','PERFSTAT');
  51. select
  52. 'analyze index '||owner||'.'||index_name||'delete statistics;'
  53. from dba_indexes
  54. where owner not in('SYS','SYSTEM','PERFSTAT');
  55. spool off;
  56. set echo on;
  57. set feedback on;
  58. spool /oracle_backup/log/del_analyze.log;
  59. @/oracle_backup/bin/del_analyze.sql
  60. spool off;
  61. exit;
  62. ---------------------------------------------------------------------------------------
[@more@]

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

转载于:http://blog.itpub.net/25133597/viewspace-1058428/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值