STA 建议收集统计信息

SQL中涉及到的对象未收集 统计信息。 STA给出收集统计的建议

创建测试表

点击(此处)折叠或打开

  1. scott@ORCL>create table tab_test as select * from dba_objects;

  2. Table created.

执行 待优化的SQL  添加一个注释 NO_STAT,将来好识别该SQL( 看清楚,这不是HINT)

点击(此处)折叠或打开

  1. scott@ORCL>select /* NO_STAT */ count(1) from tab_test;

  2.   COUNT(1)
  3. ----------
  4.      76508
STA 指定待优化sql 的方式有 1)直接输入SQL  2) 该sql还在shared pool里话,通过 sql_id 3) 如果在AWR历史数据中的话,也可以通过sql_id 4)从sqlset中获得 5) 从sql性能分析器( SQL Performance Analyzer  SPA)中获得
刚执行的sql,还在共享池中缓存,用sys用户,找到该sql的id


点击(此处)折叠或打开

  1. scott@ORCL>conn /as sysdba
  2. Connected.
  3. sys@ORCL>var sql_id varchar2(50)
  4. sys@ORCL>BEGIN
  5.   2 select sql_id INTO :sql_id from v$sql where sql_text like \'select /* NO_STAT */ count(1)%\' AND rownum<=1;
  6.   3 end;
  7.   4 /

  8. PL/SQL procedure successfully completed.

  9. sys@ORCL>print :sql_id;

  10. SQL_ID
  11. --------------------------------------------------------------------------------------------------------------------------------
  12. 5dfrhvqta7pqn
  13. sys@ORCL>select sql_text from v$sql where sql_id = \'5dfrhvqta7pqn\';

  14. SQL_TEXT
  15. ----------------------------------------------------------------------------------------------------------------------------------------------------------------
  16. select /* NO_STAT */ count(1) from tab_test
调用STA


点击(此处)折叠或打开

  1. sys@ORCL>var task_name varchar2(50)                                          -- 接受创建优化任务的任务名

  2. sys@ORCL>begin
  3.   2 :task_name := dbms_sqltune.create_tuning_task(sql_id => :sql_id);        -- 创建优化任务,返回任务名,用主机变量task_name接受
  4.   3 dbms_sqltune.execute_tuning_task (:task_name);
  5.   4 end;
  6.   5 /

  7. PL/SQL procedure successfully completed.

  8. sys@ORCL>print :task_name;                                                   -- 打印任务名

  9. TASK_NAME
  10. --------------------------------------------------------------------------------------------------------------------------------
  11. TASK_596

查看优化建议

点击(此处)折叠或打开

  1. sys@ORCL>select dbms_sqltune.report_tuning_task (:task_name) from dual;

  2. DBMS_SQLTUNE.REPORT_TUNING_TASK(:TASK_NAME)
  3. --------------------------------------------------------------------------------
  4. GENERAL INFORMATION SECTION
  5. -------------------------------------------------------------------------------
  6. Tuning Task Name : TASK_596
  7. Tuning Task Owner : SYS
  8. Workload Type : Single SQL Statement
  9. Scope : COMPREHENSIVE
  10. Time Limit(seconds): 1800
  11. Completion Status : COMPLETED
  12. Started at : 06/05/2014 12:00:11
  13. Completed at : 06/05/2014 12:00:12

  14. -------------------------------------------------------------------------------
  15. Schema Name: SCOTT
  16. SQL ID : 5dfrhvqta7pqn
  17. SQL Text : select /* NO_STAT */ count(1) from tab_test

  18. -------------------------------------------------------------------------------
  19. FINDINGS SECTION (1 finding)
  20. -------------------------------------------------------------------------------

  21. 1- Statistics Finding
  22. ---------------------
  23.   Table \"SCOTT\".\"TAB_TEST\" was not analyzed.

  24.   Recommendation
  25.   --------------
  26.   - Consider collecting optimizer statistics for this table.                                       -- 这里建议收集TAB_TEST表的统计信息
  27.     execute dbms_stats.gather_table_stats(ownname => \'SCOTT\', tabname =>                         -- 收集语句都给力现成的
  28.             \'TAB_TEST\', estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE,
  29.             method_opt => \'FOR ALL COLUMNS SIZE AUTO\');

  30.   Rationale
  31.   ---------
  32.     The optimizer requires up-to-date statistics for the table in order to
  33.     select a good execution plan.

  34. -------------------------------------------------------------------------------
  35. EXPLAIN PLANS SECTION
  36. -------------------------------------------------------------------------------

  37. 1- Original
  38. -----------
  39. Plan hash value: 2448592499

  40. -----------------------------------------------------------------------
  41. | Id | Operation | Name | Rows | Cost (%CPU)| Time |
  42. -----------------------------------------------------------------------
  43. | 0 | SELECT STATEMENT | | 1 | 305 (1)| 00:00:04 |
  44. | 1 | SORT AGGREGATE | | 1 | | |
  45. | 2 | TABLE ACCESS FULL| TAB_TEST | 76650 | 305 (1)| 00:00:04 |
  46. -----------------------------------------------------------------------

找STA的建议,执行搜集语句

点击(此处)折叠或打开

  1. sys@ORCL>execute dbms_stats.gather_table_stats(ownname => \'SCOTT\', tabname => \'TAB_TEST\', estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt => \'FOR ALL COLUMNS SIZE AUTO\');

  2. PL/SQL procedure successfully completed.

  3. Elapsed: 00:00:00.30














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

转载于:http://blog.itpub.net/12238525/viewspace-1176937/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值