使用sql profile固定执行计划实验Oracle 10g之前有outlines,10g之后sql profile作为新特性之一出现。如果针对非绑定变量的sql,outlines则力不从心。下面是实验过程
- --1.准备阶段
- SQL> select * from v$version;
- BANNER
- ----------------------------------------------------------------
- Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
- PL/SQL Release 10.2.0.1.0 - Production
- CORE 10.2.0.1.0 Production
- TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
- NLSRTL Version 10.2.0.1.0 - Production
- SQL> createtable test_raugher asselect * from dba_objects;
- 表已创建。
- SQL> createindex ind_objectid on test_raugher(object_id);
- 索引已创建。
- SQL> select object_id from test_raugher where rownum<2;
- OBJECT_ID
- ----------
- 20
- SQL> exec dbms_stats.gather_table_stats(user,"TEST_RAUGHER",cascade=>true);
- PL/SQL 过程已成功完成。
- --原sql执行计划
- SQL> set autot trace explain
- SQL> select * from test_raugher where object_id=20;
- 执行计划
- ----------------------------------------------------------
- Plan hash value: 800879874
- --------------------------------------------------------------------------------------------
- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
- --------------------------------------------------------------------------------------------
- | 0 | SELECT STATEMENT | | 1 | 95 | 2 (0)| 00:00:01 |
- | 1 | TABLE ACCESS BYINDEX ROWID| TEST_RAUGHER | 1 | 95 | 2 (0)| 00:00:01 |
- |* 2 | INDEX RANGE SCAN | IND_OBJECTID | 1 | | 1 (0)| 00:00:01 |
- --------------------------------------------------------------------------------------------
- Predicate Information (identified by operation id):
- ---------------------------------------------------
- 2 - access("OBJECT_ID"=20)
- SQL>
- --新sql执行计划
- SQL> select /*+ full(test_raugher) */ * from test_raugher where object_id=20;
- 执行计划
- ----------------------------------------------------------
- Plan hash value: 3725671026
- ----------------------------------------------------------------------------------
- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
- ----------------------------------------------------------------------------------
- | 0 | SELECT STATEMENT | | 1 | 95 | 166 (2)| 00:00:02 |
- |* 1 | TABLE ACCESS FULL| TEST_RAUGHER | 1 | 95 | 166 (2)| 00:00:02 |
- ----------------------------------------------------------------------------------
- Predicate Information (identified by operation id):
- ---------------------------------------------------
- 1 - filter("OBJECT_ID"=20)
- --2.获取新sql的sql_id
- SQL> col sql_id for a20
- SQL> col sql_text for a100
- SQL> select sql_id,sql_text from v$sql where sql_text like"%full(test_raugher)%";
- SQL_ID SQL_TEXT
- -------------------- ----------------------------------------------------------------------------------------------------
- 5nkhk378705z3 select sql_id,sql_text from v$sql where sql_text like"%full(test_raugher)%"
- g23hbdmcsdahc select /*+ full(test_raugher) */ * from test_raugher where object_id=20
- dqp79vx5pmw0k EXPLAIN PLAN SET STATEMENT_ID="PLUS4294967295"FORselect /*+ full(test_raugher) */ * from test_raug
- her where object_id=20
- --3.获取新sql的outline
- SQL> set pagesize 1000
- SQL> select * fromtable(dbms_xplan.display_cursor("g23hbdmcsdahc",null,"outline"));
- PLAN_TABLE_OUTPUT
- -----------------------------------------------------------------------------------------------
- -----------------------------------------------------------------------------------------------
- SQL_ID g23hbdmcsdahc, child number 0
- -------------------------------------
- select /*+ full(test_raugher) */ * from test_raugher where object_id=20
- Plan hash value: 3725671026
- ----------------------------------------------------------------------------------
- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
- ----------------------------------------------------------------------------------
- | 0 | SELECT STATEMENT | | | | 166 (100)| |
- |* 1 | TABLE ACCESS FULL| TEST_RAUGHER | 1 | 95 | 166 (2)| 00:00:02 |
- ----------------------------------------------------------------------------------
- Outline Data
- -------------
- /*+
- BEGIN_OUTLINE_DATA
- IGNORE_OPTIM_EMBEDDED_HINTS
- OPTIMIZER_FEATURES_ENABLE("10.2.0.1")
- ALL_ROWS
- OUTLINE_LEAF(@"SEL$1")
- FULL(@"SEL$1""TEST_RAUGHER"@"SEL$1")
- END_OUTLINE_DATA
- */
- Predicate Information (identified by operation id):
- ---------------------------------------------------
- 1 - filter("OBJECT_ID"=20)
- 已选择31行。
- --4.创建sql profile(SQLPROFILE_001)
- SQL> declare
- 2 v_hints sys.sqlprof_attr;
- 3 begin
- 4 v_hints:=sys.sqlprof_attr(
- 5 "BEGIN_OUTLINE_DATA",
- 6 "IGNORE_OPTIM_EMBEDDED_HINTS",
- 7 "OPTIMIZER_FEATURES_ENABLE(""10.2.0.1"")",
- 8 "ALL_ROWS",
- 9 "OUTLINE_LEAF(@"SEL$1")",
- 10 "FULL(@"SEL$1" "TEST_RAUGHER"@"SEL$1")",
- 11 "END_OUTLINE_DATA");
- 12 dbms_sqltune.import_sql_profile(
- 13 "select * from test_raugher where object_id=20",
- 14 v_hints,"SQLPROFILE_001",
- 15 force_match=>true,replace=>false);
- 16 end;
- 17 /
- PL/SQL 过程已成功完成。
- --5.查看是否使用sql profile
- SQL> set autot trace explain
- SQL> select * from test_raugher where object_id=20;
- 执行计划
- ----------------------------------------------------------
- Plan hash value: 3725671026
- ----------------------------------------------------------------------------------
- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
- ----------------------------------------------------------------------------------
- | 0 | SELECT STATEMENT | | 1 | 95 | 166 (2)| 00:00:02 |
- |* 1 | TABLE ACCESS FULL| TEST_RAUGHER | 1 | 95 | 166 (2)| 00:00:02 |
- ----------------------------------------------------------------------------------
- Predicate Information (identified by operation id):
- ---------------------------------------------------
- 1 - filter("OBJECT_ID"=20)
- Note
- -----
- - SQL profile "SQLPROFILE_001" used for this statement
- SQL> select * from test_raugher where object_id=200;
- 执行计划
- ----------------------------------------------------------
- Plan hash value: 3725671026
- ----------------------------------------------------------------------------------
- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
- ----------------------------------------------------------------------------------
- | 0 | SELECT STATEMENT | | 1 | 95 | 166 (2)| 00:00:02 |
- |* 1 | TABLE ACCESS FULL| TEST_RAUGHER | 1 | 95 | 166 (2)| 00:00:02 |
- ----------------------------------------------------------------------------------
- Predicate Information (identified by operation id):
- ---------------------------------------------------
- 1 - filter("OBJECT_ID"=200)
- Note
- -----
- - SQL profile "SQLPROFILE_001" used for this statement
Oracle 索引迁移,释放磁盘空间Linux LVM+RAW设备 表空间可用空间测试相关资讯 Oracle SQL Oracle Profile
- Oracle高级SQL培训与讲解 PDF (06月01日)
- SQL在Oracle内部的具体处理流程 (05/06/2015 10:43:43)
- Oracle执行SQL查询语句的步骤 (09/26/2014 19:40:59)
| - Oracle SQL语句追踪 (05/09/2015 09:42:25)
- 使用Oracle PROFILE控制会话空闲时 (05/05/2015 13:53:45)
- Oracle使用WITH AS和HINT (07/18/2014 15:55:31)
|
本文评论 查看全部评论 (0)