转://绑定执行计划sql_plan_baseline

--由于生产环境执行的sql变化较快,版本发布比较频繁,造成sql的执行计划不是很稳定,经常会有一些性能很查的sql出现
--对于这些sql,我们可以使用sql_plan_baseline对执行计划进行绑定,从而使执行计划固定下来
--前提是sql最好使用绑定变量,就算有的没有绑定变量,确定字段的值不会改变才行,因为是针对sql_id进行的绑定,如果sql文本改变,绑定也就无意义了
具体步骤:
--1、找到问题sql,如果查询sql的执行计划,如果有合适的执行计划,直接进行绑定
--查询sql执行计划对应的PLAN_HASH_VALUE
SELECT DISTINCT(PLAN_HASH_VALUE) FROM V$SQL_PLAN t WHERE SQL_ID = ‘010cv4dvf6swv‘ and child_number=‘0‘
--绑定好的执行计划:
declare
l_pls number;
begin
l_pls := DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE(sql_id => ‘524wzct86gu1d‘,
plan_hash_value => 2554538542,
enabled => ‘YES‘);
end;
/
2、如果没有合适的执行计划,就要通过自己分析,运用一些hint让sql产生比较好的执行计划
--需要绑定的sql
--oldSQL(id PLAN_HASH_VALUE)
524wzct86gu1d
2554538542
--新的sql
--newSQL(id PLAN_HASH_VALUE)
010cv4dvf6swv
756701203
--查询新的执行计划的sql_id
select * from v$sql where sql_text like ‘%zhruoyu%‘ --通过在hint中加一下特殊字符来查找
---新建制定SQLID的BASELINE根据old_sql id,PLAN_HASH_VALUE
declare
l_pls number;
begin
l_pls := DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE(sql_id => ‘524wzct86gu1d‘,
plan_hash_value => 2554538542,
enabled => ‘NO‘); --注意这里是no
end;
/
---确定原始执行计划的 sql_handle
select sql_handle, plan_name, origin, enabled, accepted,fixed,creator,optimizer_cost,sql_text
from dba_sql_plan_baselines where origin = ‘MANUAL-LOAD‘ order by created desc
SQL_HANDLE:SQL_66108ad9595208fc
PLAN_NAME:SQL_PLAN_6c44av5cp427w65e519aa
---与正确的执行计划做关联
declare
l_pls number;
begin
l_pls := DBMS_SPM.load_plans_from_cursor_cache(sql_id => ‘010cv4dvf6swv‘, -- new_SQL_ID‘
plan_hash_value => 756701203, --new_plan_hash_value
sql_handle => ‘SQL_66108ad9595208fc‘ --OLD_handle
);
end;
/
---删除错误的执行计划
declare
l_pls number;
begin
l_pls := DBMS_SPM.DROP_SQL_PLAN_BASELINE(sql_handle => ‘SQL_66108ad9595208fc‘, --sql_handle_for_original
plan_name => ‘SQL_PLAN_6c44av5cp427w65e519aa‘ --sql_plan_name_for_original
);
end;
/
--检查一下
select sql_handle, plan_name, origin, enabled, accepted,fixed,creator,optimizer_cost,sql_text
from dba_sql_plan_baselines where origin = ‘MANUAL-LOAD‘ and sql_handle=‘SQL_66108ad9595208fc‘
--完成

时间: 2024-10-12 03:15:20

转://绑定执行计划sql_plan_baseline的相关文章

绑定执行计划sql_plan_baseline

--由于生产环境执行的sql变化较快,版本发布比较频繁,造成sql的执行计划不是很稳定,经常会有一些性能很查的sql出现 --对于这些sql,我们可以使用sql_plan_baseline对执行计划进行绑定,从而使执行计划固定下来 --前提是sql最好使用绑定变量,就算有的没有绑定变量,确定字段的值不会改变才行,因为是针对sql_id进行的绑定,如果sql文本改变,绑定也就无意义了 具体步骤: --1.找到问题sql,如果查询sql的执行计划,如果有合适的执行计划,直接进行绑定 --查询sql执

Oracle - SPM固定执行计划(一)

一.前言 生产中偶尔会碰到一些sql,有多种执行计划,其中部分情况是统计信息过旧造成的,重新收集下统计信息就行了.但是有些时候重新收集统计信息也解决不了问题,而开发又在嗷嗷叫,没时间让你去慢慢分析原因的时候,这时临时的解决办法是通过spm去固定一个正确的执行计划,等找到真正原因后再解除该spm. 二.解决办法 1. 通过dbms_xplan.display_cursor查看指定sql都有哪些执行计划 SQL> select * from table(dbms_xplan.display_curs

总有一种SQL执行计划绑定方式合适你

需要绑定SQL执行计划常见的几种情况: SQL执行计划突变,导致数据库性能下降,从历史执行计划找一个合理的,进行绑定. SQL无法使用更优的执行计划,且无历史执行计划,可通过hint手工构造的方式,进行绑定. 某些Bug引起优化器生成较差的执行计划.在bug修复前,进行绑定. ORACLE固定执行计划的3种方式: Oracle 9i使用outline (可跨版本10,11g均可使用) Oracle 10g使用sql profile (11g也可使用) Oracle 11g使用sql plan m

查看真实的执行计划 绑定变量对执行计划的影响--“绑定变量窥探”

--##################################################### --####     AWR执行计划                             #### --##################################################### SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_AWR('8qfs8857jc8fw',NULL,NULL,'ADVANCED')); SEL

通过重新生成执行计划解决绑定变量执行计划偏差导致SQL执行时间过长

基本要素(时间.用户.问题) 用户11g环境下有段SQL语句在程序中执行效率非常差,但是在plsql中执行却很快,通过查看执行计划,发现使用了不同的索引导致,程序中执行的如下: PLSQL中执行的效果如下: 可以看到差别,使用门诊费用记录_IX_登记时间索引是在plsql中的执行计划,使用门诊费用记录_UQ_NO的是程序中的执行计划,两者SQL是完全相同的,唯一却别就是前者使用了绑定变量,后者是直接带参数值执行. 问题分析 问题很明显,由于绑定变量生成的执行计划与实际有偏差,11g本来有个绑定变

Oracle执行计划绑定

有时我们查询 gv$sql可以看出同一个SQL不同子游标的一些运行细节: selet t.inst_id,t.sql_id,t.child_number,t.plan_hash_value,t.last_active_time,t.elapsed_time/100000/decode(t.executions,0,1,t.executions),t.elapsed_time/1000000,t.executions,t.sql_text from gv$sql t where sql_id='x

SPM汇总学习(固定执行计划by plan_hash_value)

------sql plans(plan_hash_value) select ss.plan_hash_value phv, to_char(s.begin_interval_time, 'DD-MON HH24:MI') snap_time, ss.executions_delta execs, ss.buffer_gets_delta/decode(ss.executions_delta,0,1,ss.executions_delta) bufferget_per_exec, ss.dis

ORACLE实际执行计划与预估执行计划不一致性能优化案例

  在一台ORACLE服务器上做巡检时,使用下面SQL找出DISK_READ最高的TOP SQL分析时,分析过程中,有一条SQL语句的一些反常现象,让人觉得很奇怪: SELECT SQL_ID,        SQL_TEXT,        DISK_READS,        BUFFER_GETS,        PARSING_SCHEMA_NAME,        EXECUTIONS FROM   V$SQLAREA ORDER  BY DISK_READS DESC; 在SQL D

Oracle性能优化之执行计划管理_超越OCP精通Oracle视频教程培训31

Oracle性能优化之执行计划管理_超越OCP精通Oracle视频教程培训31 本课程介绍: Oracle视频教程,风哥本套oracle教程培训<<Oracle数据库性能优化培训教程>>的第1/10套:Oracle性能优化之执行计划管理.主要学习Oracle性能优化简介,SQL 语句处理流程,软解析和硬解析,绑定变量及案例,游标的介绍,Oracle的优化器,执行计划的查看,SQL语句访问路径,SQL语句的连接方式,Oracle驱动表,执行计划的干预,常用hint提示的使用. 视频教