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)

如何使用coe_load_sql_profile.sql来固定sql profile的更多相关文章

  1. sql_profile 固定SQL执行计划

    使用 sql_profile 固定SQL执行计划 Table of Contents 1. 扯蛋 2. 利用SQL PROFILE固定执行计划 2.1. 查看原来语句的执行计划 2.2. 指定SQL使 ...

  2. 固定sql语句传参批量查询数据库脚本

    #!/usr/bin/env python # encoding: utf-8 import pandas as pd import psycopg2 conn_dv = psycopg2.conne ...

  3. SQL CREATE TABLE 语句\SQL 约束 (Constraints)\SQL NOT NULL 约束\SQL UNIQUE 约束

    CREATE TABLE 语句 CREATE TABLE 语句用于创建数据库中的表. SQL CREATE TABLE 语法 CREATE TABLE 表名称 ( 列名称1 数据类型, 列名称2 数据 ...

  4. SQL[连载3]sql的一些高级用法

    SQL[连载3]sql的一些高级用法 SQL 高级教程 SQL SELECT TOP SQL SELECT TOP 子句 SELECT TOP 子句用于规定要返回的记录的数目. SELECT TOP ...

  5. SQL Fundamentals || Oracle SQL语言

    对于SQL语言,有两个组成部分: DML(data manipulation language) 它们是SELECT.UPDATE.INSERT.DELETE,就象它的名字一样,这4条命令是用来对数据 ...

  6. 使用Oracle Sql Developer将SQL SERVER 2008数据库移植到Oracle 11g

    ORACLE官方提供的Sql Developer自带的Oracle Migration Workbench. 什么是Oracle SQL Developer?在官方页面上,是这样介绍它的: Oracl ...

  7. MySql(五)SQL优化-优化SQL语句的一般步骤

    MySql(五)SQL优化-优化SQL语句的一般步骤 一.优化SQL语句的一般步骤 1.1 通过show status命令了解各种SQL的执行频率 1.2 定位执行效率较低的SQL语句 1.3 通过e ...

  8. SQL 2008升级SQL 2008 R2完全教程或者10.00.1600升级10.50.1600

    http://blog.csdn.net/feng19821209/article/details/8571571 SQL 2008升级SQL 2008 R2完全教程或者10.00.1600升级10. ...

  9. SQL Server恢复软件SysTools SQL Recovery/SysTools SQL Server Recovery Manager

    SQL Server恢复软件SysTools SQL Recovery/SysTools SQL Server Recovery Manager http://www.systoolsgroup.co ...

随机推荐

  1. MyBatis_多表关联查询_resultMap_单个对象_N+1方式实现

    mapper 层 提供 StudentMapper 和 ClazzMapper, StudentMapper 查询所有学生信息, ClazzMapper 根据编号查询班级信息. 再 StudentMa ...

  2. MDS 多活配置

    CephFS 介绍及使用经验分享 阅读 1179 收藏 2 2019-01-14 原文链接:www.jianshu.com WebRTC SFU中发送数据包的丢失反馈juejin.im 目录 Ceph ...

  3. Vue底层实现原理总结

    要实现MVVM 响应式原理,要实现如下几点 1.实现一个数据监听器Observer,能够对数据对象的所有属性进行监听,如有变动可拿到最新值并通知订阅者 2.实现一个指令解析器Compile,对每个元素 ...

  4. 关于spring boot项目配置文件的一些想法

    一.springboot项目中有两种配置文件 springboot项目中有两种配置文件 bootstrap 和 application bootstrap是应用程序的父上下文,由父Spring App ...

  5. sendRedirect()和forward()方法有什么区别?

    forward是服务器内部的跳转,浏览器的地址栏不会发生变化,同时可以把request和response传递给后一个请求.sendRedirect()是浏览器方面的跳转,要发送两次请求,地址栏也会发生 ...

  6. Vue大纲

    Vue框架 Vue ---- vue的基本使用 文本/事件/属性指令 补充: js面向对象 js函数 Vue ---- 表单指令 条件指令 循环指令 分隔符 过滤器 计算属性 监听属性 Vue --- ...

  7. Django day03之学习知识点

    今日是路由层学习: 3.路由匹配 3.1 正则表达式的特点: 一旦正则表达式能够匹配到内容,会立刻结束匹配关系 直接执行对应的函数.相当于采用就近原则,一旦找到就不再继续往下走了 重点: 正则表达式开 ...

  8. Linux远程目录挂载

    原文内容来自于LZ(楼主)的印象笔记,如出现排版异常或图片丢失等问题,可查看当前链接:https://app.yinxiang.com/shard/s17/nl/19391737/ad99ab1d-1 ...

  9. Android 避免内存泄漏

    什么是内存泄露? 就是该回收的内存由于种种原因没有被回收,还驻留在内存中. 内存泄露有什么影响? 可能一处小小的内存泄露就会导致整个应用卡顿,甚至崩溃. 例子说明: Toast.makeText(Ma ...

  10. 一致性hash算法--负载均衡

    有没有好奇过redis.memcache等是怎么实现集群负载均衡的呢? 其实他们都是通过一致性hash算法实现节点调度的. 讲一致性hash算法前,先简述一下求余hash算法: hash(object ...