天天看点

sql profile和sql plan baseline的比较

公众帐号:老虎刘谈SQL优化

作者介绍:老虎刘,原oracle 研发部门 Real-World Performance TEAM 成员,现在售后部门SSC专职做数据库性能优化,主要为银行、通信、证券、制造等大型企业提供服务。

比较

两个功能(以下简称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之间不是简单的优先级的问题,如果二者不冲突,则是合并使用;如果冲突,而且baseline可以reproduce(10053显示)时,使用baseline,否则使用profile。

如何验证profile是否生效?