博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
11g新特性sql plan baseline
阅读量:2447 次
发布时间:2019-05-10

本文共 2854 字,大约阅读时间需要 9 分钟。

11g推荐baseline代替原来的outline

 

下面的官方文档解释了baselineoutline的工作原理差异

102

You can maintain the existing execution plan of SQL statements over time either using stored statistics or stored SQL execution plans. Storing optimizer statistics for tables will apply to all SQL statements that refer to those tables. Storing an execution plan (that is, plan stability) maintains the plan for a single SQL statement. If both statistics and a stored plan are available for a SQL statement, then the optimizer uses the stored plan.

112

You can maintain the existing execution plan of SQL statements over time either using stored statistics or SQL plan baselines. Storing optimizer statistics for tables will apply to all SQL statements that refer to those tables. Storing an execution plan as a SQL plan baseline maintains the plan for set of SQL statements. If both statistics and a SQL plan baseline are available for a SQL statement, then the optimizer first uses a cost-based search method to build a best-cost plan, and then tries to find a matching plan in the SQL plan baseline. If a match is found, then the optimizer proceeds using this plan. Otherwise, it evaluates the cost of each of the accepted plans in the SQL plan baseline and selects the plan with the lowest cost.

 

简述一下baseline概念及其原理 

why

可以升级数据库或上线新sql时稳固执行计划

 

What

可包含多个执行计划,由hint/plan hash value以及相关运行信息组成;

只对重复运行的sql维护plan history(通过statement log辨别重复的sql),包含sql text/outline/绑定变量和编译环境,可分为accepted(baseline)unaccepted

De.ion of Figure 15-1 follows

 

How

数据库可自动监测plan change并将其同已有的Baseline比较,如果不会降低性能则添加至baseline,否则添加至baseline history(unaccepted);

OPTIMIZER_CAPTURE_SQL_PLAN_BASELINES =true时自动运行,默认false

也可从AWR/shared sql area/tuning set挑选已有的plan手工创建,不必验证便可直接加入baseline(accepted)

  my_plans PLS_INTEGER;

  my_plans := DBMS_SPM.LOAD_PLANS_FROM_SQLSET( sqlset_name => 'tset1');

  my_plans := DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE( sql_id => '99twu5t2dn5xd');

 

使用baseline时每次编译sql都要实时生成一个当前最优解,当其与baseline不匹配时(unaccepted),转而遍历baseline并找出最优解;

如果系统变动(如删除索引)导致baseline不可用,优化器会选择当前最优解;

OPTIMIZER_USE_SQL_PLAN_BASELINES =true(默认值)激活使用baseline

 

可调用APIBaseline导出到stage表,然后通过expdp/impdp导入其他数据库

 

Fixed plan

不可被更改,属性fixed=YES;优先被选用;手工加入的plan默认为non-fixed,必须设置为fixed才能被选用;

包含fixed planbaseline称为fixed baseline

 

协同sql tuning advisor

如果advisor发现比已有baseline更优的plan,会推荐接受sql profile,接受后将其加入baseline

11g advisor被封装成job可自动运行,

 

sql管理基地(management base)

位于sysaux表空间,存储statement log/ plan history/ baseline/ sql profile,定时清除没有使用的planlog

 

 

迁移outlinebaseline

Why

相比baselineoutline有一系列不足

不能自动改进,一旦使用outline执行计划就会固定,即便当前有更优选项也无法使用;

如果引用的hint失效,将其剔除并继续使用该outline

区别

Outlinehint集合,baselineplan集合;

一个sql可包含多个outline(分属不同category),而baseline只有一个category(default),但可有多个module

De.ion of pfgrf230.gif follows

 

How

De.ion of pfgrf231.gif follows

迁移完成后将create_stored_outline=false,确保今后不再创建outline

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15480802/viewspace-759562/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/15480802/viewspace-759562/

你可能感兴趣的文章
xen nfs挂载_如何在没有Xen的Linux上附加和挂载Xen DomU的磁盘分区?
查看>>
caliber读书软件_如何在无头服务器上运行gitbook(使Caliber在无头服务器上运行)?...
查看>>
Windows 7 64位无法在状态码为0xc0000225的VirtualBox / Linux上安装
查看>>
n字节对齐 代码_大但正确对齐和优化的代码比每指令/操作码打包的字节少的代码快...
查看>>
火狐 旧版sync同步服务_如何设置Firefox Sync?
查看>>
python的smiley_SmIley面对iPhone
查看>>
vim搜索 不区分大小写_Vim:不区分大小写的搜索
查看>>
电脑备份iphone_如何在Linux上备份iPhone?
查看>>
latex在编译公式_如何在Linux上编译Latex
查看>>
gitbook 安装_如何安装gitbook?
查看>>
dropbox无法安装_在Linux上安装Dropbox
查看>>
雷达安装noip_如何在Linux上安装noip2
查看>>
同步主目录
查看>>
hadoop单机映射_如何在命令行中设置Hadoop的映射器和缩减器的数量?
查看>>
chrome ibus_Chrome不适用于ibus
查看>>
磁盘映射linux_如何在Linux中快速找出故障磁盘的SATA端口? (如何将Linux磁盘名称映射到SATA端口)...
查看>>
Subversion:如何还原我在存储库本地副本中的更改?
查看>>
q-install关闭_关闭Q2A主题
查看>>
制作交换分区什么意思_如何制作交换分区
查看>>
git 还原合并_如何在Git中还原合并
查看>>