Oracle 11g执行计划固定-Baseline


测试Oracle 11g 固定执行计划-Baseline

一,选定sql_id

  1. SQL> pagesize 300  
  2. SQL> set linesize 300  
  3. SQL> set autotrace on  
  4. SQL> var name varchar2(10);  
  5. SQL> exec :name :='IT';  
  6. select department_name  
  7. from hr.departments dept  
  8. where department_id in (select department_id from hr.employees emp)  
  9. and department_name=:name;  
  10.   
  11. DEPARTMENT_NAME  
  12. ------------------------------  
  13. IT  
  14.   
  15. 1 rows selected.  
  16.   
  17. Execution Plan  
  18. ----------------------------------------------------------  
  19. Plan hash value: 2605691773  
  20.   
  21. ----------------------------------------------------------------------------------------  
  22. | Id  | Operation          | Name              | Rows  | Bytes | Cost (%CPU)| Time     |  
  23. ----------------------------------------------------------------------------------------  
  24. |   0 | SELECT STATEMENT   |                   |     1 |    19 |     3   (0)| 00:00:01 |  
  25. |   1 |  NESTED LOOPS SEMI |                   |     1 |    19 |     3   (0)| 00:00:01 |  
  26. |*  2 |   TABLE ACCESS FULL| DEPARTMENTS       |     1 |    16 |     3   (0)| 00:00:01 |  
  27. |*  3 |   INDEX RANGE SCAN | EMP_DEPARTMENT_IX |    41 |   123 |     0   (0)| 00:00:01 |  
  28. ----------------------------------------------------------------------------------------  
  29.   
  30. Predicate Information (identified by operation id):  
  31. ---------------------------------------------------  
  32.   
  33.    2 - filter("DEPARTMENT_NAME"=:NAME)  
  34.    3 - access("DEPARTMENT_ID"="DEPARTMENT_ID")  
  35.   
  36. SQL> select sql_id from v$sql where sql_fulltext like'select department_name%';  
  37. SQL_ID  
  38. -------------  
  39. bd8mzf35svfm3  

上面的sql现在的执行计划是情况,假设如上的执行计划效率底下,我们想用其它的执行计划(全表扫描emp)来代替它,并用oracle 11g中的sql plan baseline来固定次SQL的执行。

二,添加Hint的sql:

  1. select department_name  
  2. from hr.departments dept  
  3. where department_id in (select/*+FULL(emp)*/ department_id from hr.employees emp)  
  4. and department_name=:name;  
  5. Execution Plan  
  6. ----------------------------------------------------------  
  7. Plan hash value: 2317224448  
  8.   
  9. ----------------------------------------------------------------------------------  
  10. | Id  | Operation          | Name        | Rows  | Bytes | Cost (%CPU)| Time     |  
  11. ----------------------------------------------------------------------------------  
  12. |   0 | SELECT STATEMENT   |             |     1 |    19 |     7  (15)| 00:00:01 |  
  13. |*  1 |  HASH JOIN SEMI    |             |     1 |    19 |     7  (15)| 00:00:01 |  
  14. |*  2 |   TABLE ACCESS FULL| DEPARTMENTS |     1 |    16 |     3   (0)| 00:00:01 |  
  15. |   3 |   TABLE ACCESS FULL| EMPLOYEES   |   107 |   321 |     3   (0)| 00:00:01 |  
  16. ----------------------------------------------------------------------------------  
  17.   
  18. Predicate Information (identified by operation id):  
  19. ---------------------------------------------------  
  20.   
  21.    1 - access("DEPARTMENT_ID"="DEPARTMENT_ID")  
  22.    2 - filter("DEPARTMENT_NAME"=:NAME)  
  23.   
  24.   
  25. SQL> select sql_id from v$sql_plan where plan_hash_value=2317224448;  
  26.   
  27. SQL_ID  
  28. -------------  
  29. 5kuqnnugsrhj3  
  30.   
  31. 此计划sql_id:5kuqnnugsrhj3 hash_value:2317224448  
  • 1
  • 2
  • 3
  • 下一页

相关内容