Oracle 11g新特性解析-自适应游标共享(三)

 
   | |

导读:Oracle 11g的新特性自适应游标共享为包含有绑定变量的SQL语句有效共享执行计划提供了一个更简单的方法,但只有绑定变量有值时才有意义,自适应游标共享有时……

关键词:Oracle Oracle 11g Oracle新特性 自适应游标

正在加载数据...

  我用同一个查询的另外两次执行来说明了这个概念,但使用了完全不同的绑定变量,如列表4所示:

  列表4: 


-- Execution #2
  -----
  BEGIN
  :cust_start := 42999;
  :cust_end := 50000;
  :time_start := '01 JAN 1997';
  :time_end := '31 MAR 1998';
  SELECT
  SUM(amount_sold)
  ,SUM(quantity_sold)
  INTO
  :total_sold
  ,:total_qty
  FROM sh.sales
  WHERE cust_id BETWEEN :cust_start AND :cust_end
  AND time_id BETWEEN :time_start AND :time_end;
  END;
  /
  -----
  -- Execution #3
  -----
  BEGIN
  :cust_start := 1000;
  :cust_end := 1400;
  :time_start := '01 JAN 1996';
  :time_end := '31 MAR 1997';
  SELECT
  SUM(amount_sold)
  ,SUM(quantity_sold)
  INTO
  :total_sold
  ,:total_qty
  FROM sh.sales
  WHERE cust_id BETWEEN :cust_start AND :cust_end
  AND time_id BETWEEN :time_start AND :time_end;
  END;

  为查询游标指定的自适应游标共享元数据产生的变化显示在列表5中。

  列表5: 


SQL Statements With Bind Sensitivity Enabled
  (from V$SQL)
  Plan Bind
  Hash Hash Sensi- Bind
  SQL ID Value Value tive? Aware? SQL Text
  ---------------- ------------ ------------ ------ ------
  87qtpurhk664g 3777173647 2855975716 Y Y SELECT SUM(AMOUNT_SOLD) ,SUM(QUANTITY_SOLD) FROM SH.SALES WHERE CUST_ID BETWEEN
  :B4 AND :B3 AND TIME_ID BETWEEN :B2 AND :B1
  87qtpurhk664g 3777173647 787661731 Y N SELECT SUM(AMOUNT_SOLD) ,SUM(QUANTITY_SOLD) FROM SH.SALES WHERE CUST_ID BETWEEN
  :B4 AND :B3 AND TIME_ID BETWEEN :B2 AND :B1
  Histograms for Adaptive Cursor Sharing
  (from V$SQL_CS_HISTOGRAM)
  Exec-
  Hash Chld Bckt ution
  Value SQL ID # ID# Count
  ------------ ---------------- ----- ----- -------
  3777173647 87qtpurhk664g 1 0 1
  3777173647 87qtpurhk664g 1 1 0
  3777173647 87qtpurhk664g 1 2 0
  3777173647 87qtpurhk664g 0 0 1
  3777173647 87qtpurhk664g 0 1 1
  3777173647 87qtpurhk664g 0 2 0
  Selectivity Metrics for Adaptive Cursor Sharing
  (from V$SQL_CS_STATISTICS)
  # of
  Hash Chld Hash Exec- # of Buffer CPU
  Value SQL ID # Value Peek? utions Rows Gets Time
  ------------ ---------------- ----- ------------ ----- ------- -------
  3777173647 87qtpurhk664g 1 1601990286 Y 1 1 2 0
  3777173647 87qtpurhk664g 0 4302390 Y 1 1098 3178 0
  Selectivity Metrics for Adaptive Cursor Sharing
  (from V$SQL_CS_SELECTIVITY)
  Hash Chld Rng
  Value SQL ID # ID# Low Value High Value Predicates
  ------------ ---------------- ----- ----- ------------ ------------
  3777173647 87qtpurhk664g 1 0 0.000616 0.000753 <=B1
  3777173647 87qtpurhk664g 1 0 0.900000 1.100000 >=B2
  3777173647 87qtpurhk664g 1 0 0.109520 0.133858 <=B3
  3777173647 87qtpurhk664g 1 0 0.821710 1.004312 >=B4

  注意,Oracle 11g已经为hash值为2855975716的SQL语句创建了新的子游标,不将它们都标记为绑定敏感和绑定感知,元数据中为这些游标指定的选择性度量值也更新了。

  当绑定变量的值超出了现有绑定感知游标影响的范围时,执行包含这个绑定变量的查询会发生什么?在语句的硬解析期间,优化器可能只会选择扩大选择范围,以包括新的绑定值,这是通过创建新的子游标结合这两套绑定变量值,然后删除旧的、范围小的游标来实现的,显然,这样只会产生几个的确需要的几个子游标。

  那么如何激活这一新功能呢?好消息是在Oracle 11g中默认就已经启动了,它完全与CURSOR_SHARING初始化参数无关,这大大增加了在OLTP/DSS系统中SQL语句使用绑定变量的机会。

  对SQL计划管理(SPM)的影响:如果你读过我之前写的SQL计划管理方面的文章,你可能会疑惑自适应游标共享是否会影响SQL计划管理捕获和保存SQL执行计划到SQL管理基础库中的功能,下面列出它们之间交互的摘要信息:

  如果初始化参数OPTIMIZER_CAPTURE_SQL_PLAN_BASELINES被设置为TRUE以激活自动捕获执行计划,那么带有绑定变量的SQL语句也会被标记为启用和接收执行计划。

  如果同一个语句构建了第二个执行计划 – 并不是自适应游标共享 – 那么该计划只会简单地添加到语句的计划历史中,但它不会立即被使用,因为SPM首先会要求校验这个新的执行计划。

  不幸的是,这意味着一个很好的执行计划会被忽略,解决这个问题的一个好办法是将自动捕获计划设置为FALSE,然后在库缓存中将所有子游标捕获到SMB中,这样将会强制所有子游标的计划被标记为SQL计划基线。

  结束语

  Oracle 11g的新特性自适应游标共享为包含有绑定变量的SQL语句有效共享执行计划提供了一个更简单的方法,但只有绑定变量有值时才有意义,自适应游标共享有时也会产生新的执行计划,但共享的游标会保持相对小的数量。


Oracle 11g新特性解析-自适应游标共享
 Oracle 11g新特性解析-自适应游标共享(一)
 Oracle 11g新特性解析-自适应游标共享(二)
 Oracle 11g新特性解析-自适应游标共享(三)

原文出处:http://tech.it168.com/a2008/1231/261/000000261898_2.shtml
 
来源:IT168    译者:开心果   
 
 
 
 
 

Oracle SQL

 
Oracle Application Express(Oracle APEX)设计的一个主要目标是:快速构建基于Oracle数据库的Web应用程序。
 
SELECT子句通常是一个SELECT语句的第一个子句。它标识出你所想要包含到结果集中的列。这些列是从在FROM子句中指定的基表中返回的。
 
没有ORDER BY子句,Oracle不会保证行显示的顺序。它们可能是按照你想要的顺序排列,但也可能不是。
 
Toad For Oracle的产品策略就是为Oracle开发一款工具,它可以满足不同人的不同需求,比如DBA、开发人员、分析师以及管理者等等。
 
据Toad For Oracle产品经理John Pocknell所说,这次发布的Toad 10致力于生产力的概念,其中包括了:灵活性、易用性、自动化和协作等内容。

热门技术手册排行

 

在本次的技术手册中,我们为您提供了PL/SQL的基础知识以及专家指导,包括了PL/SQL中的数据类型简介、PL/SQL函数与触发器以及PL/SQL中的存储过程等,相信您无论是高手还是菜鸟都可以获得有帮助的信息。

 

本系列文章由三部分组成,为Oracle数据库管理员(DBA)面试成功的必备手册。本专题内容囊括从DBA最初的面试开始,从写“杀手简历”到求职信、到面试过程到Oracle认证再到上升到公司高层最后到你成为公司里的明星DBA。专家为你一一指点迷津,最终让你登上成功的宝座。

 

要成为一名DBA,你需要具备哪些素质?DBA的薪酬待遇如何?DBA的职业道路究竟可以走向何方?我们将在本次的技术手册中为您一一解答。

 

在本次技术手册中,我们将对SQL Server存储过程的调试进行详细的介绍,包括了基础的调试方法和在调试过程中出现的T-SQL性能问题和解决方法。

 

本技术专题主要围绕sql server设计这个话题展开,侧重介绍了sql server集簇索引的设计、如何创建sql server索引、如何优化索引、索引的能与不能、处理sql server 2000索引碎片技巧以及维护sql server索引以实现查询优化等等。

查看更多
 
 

登录TechTarget中国

关闭
本服务仅向TechTarget中国的会员开放,请登录或立即免费注册
电子邮件地址:
请输入您的电子邮件地址
密码:
下次自动登录