绑定运行计划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'
--完毕
绑定运行计划sql_plan_baseline的更多相关文章
- 【故障处理141119】一次数据库不繁忙时一条sql语句2个运行计划导致业务超时的故障处理
1,故障描写叙述: 一条select有两个运行计划.在sqlplus中运行选择好的运行计划.仅仅要40毫秒.而在程序中运行选择了差的运行计划,要1分23秒左右,导致前台业务超时报错. 2.故障解决: ...
- 使用SQL Profile及SQL Tuning Advisor固定运行计划
SQL Profile就是为某一SQL语句提供除了系统统计信息.对象(表和索引等)统计信息之外的其它信息,比方执行环境.额外的更准确的统计信息,以帮助优化器为SQL语句选择更适合的执行计划. SQL ...
- Spark入门实战系列--6.SparkSQL(中)--深入了解SparkSQL运行计划及调优
[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 1.1 运行环境说明 1.1.1 硬软件环境 线程,主频2.2G,10G内存 l 虚拟软 ...
- 运行计划之误区,为什么COST非常小,SQL却跑得非常慢?
转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/38321477 2014.7.31就晚20:30 My Oracle Support组猫大师 ...
- oracle分区表运行计划
分区表有非常多优点,以大化小,一小化了,加上并行的使用,在loap中能往往能提高几十倍甚至几百倍的效果. 当然表设计得不好也会适得其反.效果比普通表跟糟糕. 为了更好的使用分区表,这里看一下分区表的运 ...
- index_ss hint 使用的运行计划变化对照
index_ss hint 使用的运行计划变化对照 当中 buffer 代表:当前操作中发生的内存读次数,包括一致性读和当前读 尽管 emp 表记录数不多,可是buffer 读内存的次数区别还是有点 ...
- SQL Server 性能调优 之运行计划(Execution Plan)调优
运行计划中的三种 Join 策略 SQL Server 存在三种 Join 策略:Hash Join,Merge Join,Nested Loop Join. Hash Join:用来处理没有排过序/ ...
- 使用hint优化Oracle的运行计划 以及 SQL Tune Advisor的使用
背景: 某表忽然出现查询很缓慢的情况.cost 100+ 秒以上:严重影响生产. 原SQL: explain plan for select * from ( select ID id,RET_NO ...
- mysql 运行计划explain具体解释
explain主要是用来获取一个query的运行计划,描写叙述mysql怎样运行查询操作.运行顺序,使用到的索引,以及mysql成功返回结果集须要运行的行数.能够帮助我们分析 select 语句,让我 ...
随机推荐
- javascript入门视频第一天 小案例制作 零基础开始学习javascript
JavaScript 是我们网页设计师必备的技能之一.我们主要用javascript来写的是网页特效.我们从零基础开始学习javascript入门. 但是,好的同学刚开始不知道怎么学习,接触js,因此 ...
- CCIE路由实验(2) -- BGP选路原则
BGP路径属性分为4类: 公认必遵(Well-Known Mandatory):BGP更新报文中必须包含的,且必须被所有BGP厂商实现所能识别的,包括ORIGIN,AS-PATH和Next_Hop 1 ...
- Python 第四篇:生成器、迭代器、装饰器、递归函数与正则表达式
一:生成器:Generator,可以理解为是一种一个函数产生一个迭代器,而迭代器里面的数据是可以通过for循环获取的,那么这个函数就是一个生成器,即生成器是有函数生成的,创建生成器使用()表示,比如g ...
- Arcgis镶嵌数据集java代码操作
转自:http://www.cdtarena.com/javapx/201307/9105.html 镶嵌数据集结合了之前arcgis管理影像的栅格目录和栅格数据集,为解决海量影像管理提供了很好的方案 ...
- 自定义的Server
自定义的Server 我们在上面对ASP.NET Core默认提供的具有跨平台能力的KestrelServer进行了详细介绍(<聊聊ASP.NET Core默认提供的这个跨平台的服务器——Kes ...
- Qt Charts的简单安装与使用
http://blog.qt.io/blog/2016/01/18/qt-charts-2-1-0-release/ 下载地址: https://codereview.qt-project.org/# ...
- Mac中MacPorts安装和使用
文章转载至http://www.zikercn.com/node/8 星期四, 06/07/2012 - 19:02 - 张慧敏 MacPorts简单介绍 MacPorts,以前叫做DarwinPor ...
- PHP脚本监控程序
#!/bin/sh # Find ip IP=`/sbin/ifconfig eth1 | grep 'inet addr' | awk '{ print substr($2, index($2, & ...
- c语言:链表排序, 链表反转
下面将实现链表排序的排序和遍历显示功能: 所定义的链表结构如下: head -> p1 -> p2 ->p3 ->....->pn; head的本身不作为数据节点,hea ...
- android listview滚动到顶部
1.为了实现类似IOS点击状态栏,列表回滚到顶部的功能(要平滑滚动效果),android上点击一个按钮或是图片什么的也可以让listview一次性滚动到顶部(滑动太多页时,一次可能滚不到顶部,使用ha ...