Oracle数据库11g:SQL计划管理程序(一)(2)

日期: 2008-06-17 作者:Jim Czuprynski翻译:黄永兵 来源:TechTarget中国

  捕获SQL计划基线


  好消息是在Oracle11g中捕获SQL计划基线存储到SMB中一件相当容易的事情,首先,初始化参数OPTIMIZER_CAPTURE_SQL_PLAN_BASELINES控制自动捕获SQL计划基线是否激活,这个参数的默认值是FALSE,意味着SQL计划基线不是自动捕获的,但是,一经DBA设置为TRUE(不管是在会话层还是在系统层),SPM就开始记录SQL语句的执行,当一条SQL语句不止被执行过一次时,该语句将被考虑作为SQL计划基线捕获候选者。


  其次,一个新的Oracle11g包(DBMS_SPM)提供捕获和预先从几个源通过手动发送计划引入高性能SQL语句的能力:


  ◆在数据库当前缓存中发现了一个或多个SQL语句可以用于创建SQL计划基线,存储过程LOAD_PLANS_FROM_CURSOR_CACHE可以用于捕获任何库缓存(作为SMB的潜在候选者)中语句的子集。


  ◆存储在SQL调整集或一个AWR快照中的SQL语句可以被捕获并通过LOAD_PLANS_FROM_SQLSET存储过程翻译成SQL计划基线。


  ◆最后,SQL计划基线由外部输入转换表中的SQL语句衍生而来,这就意味着从一个完全不同的数据库捕获语句是可能的,也就是说,在一个QA环境中,预先在当前存储过程环境中种下它们。(我将在本系列文章的后面花费大量的时间讨论如何使其成为一个优秀的技术,以预防在数据库或应用程序升级过程中出现计划回退。)


  查看SQL计划基线信息


  在SMB中捕获的SQL计划基线元数据包括SPM属性和CBO计划控制,当一个新的而没有使用过的计划进入SMB后,它被标记为ENABLED,但是它不能标记为ACCEPTED,除非:(A)CBO已经评估了这个计划并将其视为最佳计划,或(B)这个计划已经演变成ACCEPTED模式。在CBO考虑使用某个执行计划前,它必须同时将其标记为ENABLED和ACCEPTED。


  查看该元数据最简单的方法是查询DBA_SQL_PLAN_BASELINES数据字典视图,下面是该视图中大部分有价值的计划控制信息的摘要:  













































表1.1 SQL计划基线计划控制元数据
属性 描述
SQL_HANDLE 用字符串表示的SQL唯一性标识,它可以作为搜索关键字
PLAN_NAME 用字符串表示的唯一的SQL计划,它可以作为搜索关键字
SQL_TEXT 非正常SQL语句,实际上是文本
ORIGIN 识别下面的SQL计划:
l   AUTO-CAPTURE:自动捕获
l    MANUAL-LOAD:手动演变
l    MANUAL-SQLTUNE:通过SQL调整顾问程序自动演变
l    AUTO-SQLTUNE:通过自动SQL调整程序自动演变
ENABLED 因为Oracle11g有下面任何一个原因,就表明该SQL计划是有效且很优秀的计划:
l  自动接受(accepted)它,或
l   DBA通过存储过程DBMS_SPM.alter_SQL_PLAN_BASELINE()手动将它的状态强制设置为ACCEPTED
FIXED SQL计划的FIXED属性被设置为YES将被视为使用CBO优化器,如果有多个计划被标记为FIXED,CBO将从这些标记了的计划中选择最佳的执行计划
OPTIMIZER_COST 通过CBO使用这个执行计划执行SQL语句估量总体成本

  另外一个查看执行一条SQL语句现存的SQL计划基线可能的影响的方法是通过新的DBMS_XPLAN包中的DISPLAY_SQL_PLAN_BASELINE存储过程实现的,例如:我可以用这个存储过程查看所有匹配SMB中的SQL语句的SQL计划基线,如果我也提供了该SQL语句计划的名字,那么它的执行计划也将同时显示出来。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

相关推荐