oracle的sql plan详解,Oracle 11g SQL性能的新特性(三)- SQL Plan Management

执行计划的选择过程

在OPTIMIZER_USE_SQL_PLAN_BASELINES被设置成默认值TRUE,SQl Plan Baseline就会起作用。

1.首先,无论是否存在baseline,oracle都会正常进行硬解析或者软解析,为SQL生成一个执行计划。 由于ACS和bind peeking的作用,存在baseline的SQL有可能在这时生成一个不同于baseline的执行计划。2. 如果baseline不存在,就按生成的计划执行。如果baseline存在,那么要查看history里是否有这个计划,如果没有,就将这个计划插入,并标记为ENABLED,NON-ACCEPTED.3. 在baseline中查看是否有FIXED的计划存在,如果存在,执行FIXED的计划,如果存在多个FIXED的计划,根据统计信息重新计算cost,选择cost小的那个。4. 如果FIXED的计划不存在,就选择ACCEPTED的计划执行。 如果存在多个ACCEPTED的计划,根据统计信息重新计算cost,选择cost小的那个。

* 注意这里每次重新计算cost的代价不大,因为执行计划是已知的,优化器不必遍历所有的可能,只需根据算法计算出已知计划的cost便可

执行计划的演化(evolution)

执行计划的演化指Plan History里的执行计划从NON-ACCEPTED,变成ACCEPTED的过程。 如果上所述,由于ACS和Bind Peeking的作用,存在baseline的SQL有可能生成新的执行计划,被保存到Plan History中。 Oracle提供了API,通过自动或手工的方式,将一个计划标记为ACCEPTED,这个计划就会被后续的执行所选择。

使用DBMS_SPM.EVOLVE_SQL_PLAN_BASELINE这个API来控制执行计划的演化。语法:DBMS_SPM.EVOLVE_SQL_PLAN_BASELINE (sql_handle IN VARCHAR2 := NULL,--&gt NULL 表示针对所有SQLplan_name  IN VARCHAR2 := NULL,time_limit IN INTEGER  := DBMS_SPM.AUTO_LIMIT,verify     IN VARCHAR2 := 'YES',commit     IN VARCHAR2 := 'YES' )RETURN CLOB;

这里由两个标记控制:o Verify+ YES (只有性能更好的计划才会被演化)+ NO (演化所有的计划)o Commit+ YES (直接演化)+ NO (只生成报告)

这里可以通过不同的排列组合,达到不同的效果:o 自动接收所有性能更好的执行计划 (Verify->YES, Commit->YES)o 自动接收所有新的执行计划 (Verify->NO, Commit->YES)o 比较性能,生成报告,人工确认是否演化 (Verify->NO, Commit->NO)

* 对于性能的验证的方式,oracle会去实际执行来比较buffer gets

修改已有的Baseline

通过DBMS_SPM.ALTER_SQL_PLAN_BASELINE来完成。

DBMS_SPM.ALTER_SQL_PLAN_BASELINE (sql_handle      IN VARCHAR2 := NULL,plan_name       IN VARCHAR2 := NULL,attribute_name  IN VARCHAR2,attribute_value IN VARCHAR2 )RETURN PLS_INTEGER;

比如,把某个baseline 标记为FIXED,更多属性请参见官方文档。

SET SERVEROUT ON;DECLAREx NUMBER;BEGINx := DBMS_SPM.ALTER_SQL_PLAN_BASELINE (sql_handle      => '&&sql_handle',plan_name       => '&&plan_name',attribute_name  => 'FIXED',attribute_value => 'YES' );END;/

常见应用

o 我们常见的一个场景是,一条SQL在使用hint时会生成一个好的计划,我们需要以此在原SQL上创建一个baseline。 具体方法请参加note 787692.1

注意

o 当您使用多种方式控制执行计划时:+ Stored Outline存在时,它具有最高的优先级。+ 已经实施的SQL profile会被自动加入到SQL plan baseline中+ STA(SQL Tuning Advisor) 会自动接收新的profile,意味着它会生成新的baselineo 如果可能话,尽量移植到SPM,混合多种方式会变得复杂

相关参数

optimizer_capture_sql_plan_baselinesoptimizer_use_sql_plan_baselinescreate_stored_outlineuse_stored_outlines

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle 11g是一种关系型数据库管理系统,具有强大的数据管理和查询功能。以下是关于Oracle 11g SQL基础知识的回答。 SQL(Structured Query Language)是一种用于与数据库进行交互的标准语言。在Oracle 11g中,SQL被用于进行数据的创建、修改、删除和查询。 首先,创建表是操作数据库的基础之一。通过使用CREATE TABLE语句,我们可以指定表的名称、列的名称和数据类型。例如,创建一个名为"employees"的表,包含员工的姓名、年龄和工资信息,可以使用以下SQL语句: CREATE TABLE employees ( name VARCHAR(50), age INT, salary DECIMAL(10,2) ); 接下来,可以使用INSERT INTO语句向表中插入数据。例如,插入一条员工信息的SQL语句如下: INSERT INTO employees (name, age, salary) VALUES ('John', 30, 5000.00); 为了查询表中的数据,可以使用SELECT语句。SELECT语句允许我们指定要检索的列,使用FROM关键字指定表的名称,以及可以使用WHERE子句来加入筛选条件。例如,检索所有员工的姓名和工资信息的SQL语句如下: SELECT name, salary FROM employees; 还可以使用UPDATE语句修改表中的数据。例如,将员工John的工资提高到6000.00的SQL语句如下: UPDATE employees SET salary = 6000.00 WHERE name = 'John'; 最后,可以使用DELETE语句删除表中的数据。例如,删除所有年龄小于25岁的员工信息的SQL语句如下: DELETE FROM employees WHERE age < 25; 除了上述基本的SQL语句,Oracle 11g还有其他高级功能,如聚合函数、连接、子查询、视图和索引等。这些功能可以帮助我们更高效地操作和查询数据。 简而言之,Oracle 11g SQL基础涵盖了表的创建、数据的插入、查询、修改和删除。通过掌握这些基础知识,我们可以使用SQL语言进行数据管理和操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值