SQLT工具包含一个脚本,名字是 coe_load_sql_profile.sql,下面以用户SCOTT的EMP表为例,说明如何使用该脚本固定sql profile.

1.

SQL> -- 对emp的列ename创建一个索引
SQL> create index i_emp_ename on scott.emp(ename);
SQL> --收集统计信息
SQL> exec dbms_stats.gather_table_stats(ownname=>'SCOTT',tabname=>'EMP')

2.运行原始的SQL语句

SQL> select ename from scott.emp where ename='MILLER';
ENAME
----------
MILLER 执行计划如下:
-------------------------------
SQL_ID 329d885bxvrcr
-------------------------------
Plan hash value: 4001599462
-------------------------------------------------
| Id | Operation | Name | E-Rows |
-------------------------------------------------
| 0 | SELECT STATEMENT | | |
|* 1 | INDEX RANGE SCAN| I_EMP_ENAME | 1 |
-------------------------------------------------

--这是我们需要更改的plan

3. 运行带有hint的SQL

SQL> select /*+ FULL (EMP) */ ename from scott.emp where ename='MILLER'; 

执行计划如下:
-------------------------------
SQL_ID 4f74t4ab7rd5y
-------------------------------
Plan hash value: 3956160932
-------------------------------------------
| Id | Operation | Name | E-Rows |
-------------------------------------------
| 0 | SELECT STATEMENT | | |
|* 1 | TABLE ACCESS FULL| EMP | 1 |
-------------------------------------------

--这是我们需要的plan

4: 可以通过下面的SQL获取这2个SQL的sql_id和plan_hash_value

SQL> select sql_id ,plan_hash_value, sql_text from v$sql where sql_text like '%scott.emp%';
SQL_ID PLAN_HASH_VALUE SQL_TEXT
------------- --------------- ----------------------------------------------------------------------------------------
4f74t4ab7rd5y 3956160932 select /*+ FULL (EMP) */ ename from scott.emp where ename='MILLER'
329d885bxvrcr 4001599462 select ename from scott.emp where ename='MILLER'
--329d885bxvrcr   - 这是原始语句的SQL ID
--4f74t4ab7rd5y - 这是使用hint的SQL ID
--3956160932 - 这是需要替换的plan hash value.

5.进行plan的替换
--这两个计划都需要在缓存或AWR中
--需要以具有DBA权限的用户身份连接,例如SYSTEM

SQL> conn system
SQL> @coe_load_sql_profile.sql
Parameter 1:
ORIGINAL_SQL_ID (required)
输入 1 的值: 329d885bxvrcr Parameter 2:
MODIFIED_SQL_ID (required) 输入 2 的值: 4f74t4ab7rd5y Parameter 3:
PLAN_HASH_VALUE (required) 输入 3 的值: 3956160932 Values passed to coe_load_sql_profile:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ORIGINAL_SQL_ID: "329d885bxvrcr"
MODIFIED_SQL_ID: "4f74t4ab7rd5y"
PLAN_HASH_VALUE: "3956160932" ORIGINAL:329D885BXVRCR MODIFIED:4F74T4AB7RD5Y PHV:3956160932 SIGNATURE:15822026218863957422 CREATED BY COE_LOAD_SQL_PROFILE.SQL
SQL>SET ECHO OFF; ****************************************************************************
* Enter SYSTEM password to export staging table STGTAB_SQLPROF_329d885bxvrcr
**************************************************************************** Export: Release 11.2.0.4.0 - Production on 星期二 12月 5 15:36:24 2017 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. 口令: coe_load_sql_profile completed.
SQL>

6.运行原来的SQL语句

SQL>conn scott/tiger
SQL> select ename from scott.emp where ename='MILLER'; PLAN_TABLE_OUTPUT
-------------------------------
SQL_ID 329d885bxvrcr
-------------------------------
Plan hash value: 3956160932 -------------------------------------------
| Id | Operation | Name | E-Rows |
-------------------------------------------
| 0 | SELECT STATEMENT | | |
|* 1 | TABLE ACCESS FULL| EMP | 1 |
------------------------------------------- Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("ENAME"='MILLER')
Note
-----
- SQL profile 329D885BXVRCR_3956160932 used for this statement

我们可以看到,原始的SQL现在和使用hint的sql具有相同的plan_hash_value和plan。

此外,我们看到这个SQL启用了一个SQL配置文件。

相关参考:
Directing Plans with Baselines/Profiles Using coe_load_sql_baseline.sql / coe_load_sql_profile.sql (shipped with SQLT) (Doc ID 1400903.1)

最新文章

  1. 小菜学习Winform(三)Socket点对点通信
  2. [ActionScript 3.0] xml生成方式之二
  3. Redis笔记(六)Redis的消息通知
  4. [游戏模版9] Win32 半透明 图像处理
  5. gulp学习
  6. JavaPersistenceWithHibernate第二版笔记Getting started with ORM-001用JPA和Hibernate实现HellowWorld(JTA、Bitronix)
  7. Notepad++插件之FingerText
  8. Ruby 一些经常使用的细节
  9. 【Owin 学习系列】2. Owin Startup 类解析
  10. PPLB条码打印
  11. UWP 返回顶部按钮
  12. 浅析C语言中的整形类型
  13. Elasticsearch修改network后启动失败
  14. 两个ArrayList之间求交并补
  15. java基础(四) -变量类型
  16. include require include_once require_once
  17. sublime sftp 打开远程文件夹
  18. Hibernate框架 主配置文件 Hibernate.cfg.xml 映射配置 说明
  19. 强化学习 车杆游戏 DQN 深度强化学习 Demo
  20. Pthreads n 体问题

热门文章

  1. 使用 RMI 实现方法的远程调用
  2. Es6中箭头函数与普通函数的区别
  3. 面试必问:JVM类加载机制详细解析
  4. 5分钟搞清楚Synchronized和Lock的概念与区别
  5. 函数式编程 -> Lambda
  6. Test 1022
  7. handler.postDelayed(new Runnable()){ }运行在主线程吗
  8. 《Java基础知识》Java静态内部类、匿名内部类、成员式内部类和局部内部类
  9. let和const总结(ES6)
  10. css应用视觉设计