前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于sql profile和sql plan baseline的简要说明

关于sql profile和sql plan baseline的简要说明

作者头像
老虎刘
发布2022-06-22 17:54:41
3920
发布2022-06-22 17:54:41
举报
文章被收录于专栏:老虎刘谈oracle性能优化

两个功能(以下简称profile和baseline)都能固定SQL的执行计划:

1、

profile是10g开始提供的功能,baseline是11g开始提供的功能

2、

profile只能固定一个执行计划;

baseline可以固定多个执行计划,如某sql有10个执行计划,可以使用baseline固定使用其中的2个,根据11g adaptive plan的特性,让优化器从这2个计划中自动选择,fixed属性为yes的执行计划优先被选择,可以设置多个计划的fixed=yes

3、

profile的执行计划可以直接从历史数据(AWR)里面load,baseline需要先把awr的数据load到STS(SQL Tuning Set),才能再load到baseline。所以一般生产系统执行计划突然变差的应急处理,多使用profile。

使用下面两个脚本做应急处理:

coe_load_sql_profile.sql

coe_load_sql_baseline.sql (如果好的执行计划还在cache,使用起来也与上面脚本一样方便)

4、

profile可以对未使用绑定变量的SQL进行执行计划绑定,如:

select xx from t1 where id=1;select xx from t1 where id=2等,

这样的sql一般只能使用profile绑定(选择其中任意一个sql_id,将force_match参数设置为true);而baseline不可以,如果要绑定,需要逐条sql_id进行绑定。如果将系统参数cursor_sharing改成FORCE,主要的SQL也可以使用baseline。

5、

profile优先级大于baseline,如果有profile存在,优先使用profile。

如何验证profile是否生效?

很多时候SQL是在业务里面才能执行,可能还有很多的绑定变量,可以通过explain plan for SQL ,在select * from table(dbms_xplan.display)的note 部分,看看是不是有SQL profile "xxxxxxxxxxxxx" used for this statement 字样,如果有,表明profile已经绑定成功。

sql_id不一样会不会有影响?

profile识别的不是sql_id,而是signature,如果几个sql 只是在大小写、空格数、回车数或tab键有区别,那么这些SQL在系统中的signature就是一样的,可以使用同一个profile。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-12-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 老虎刘谈oracle性能优化 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档