`
csstome
  • 浏览: 1522717 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Oracle自适应共享游标

 
阅读更多
自适应游标共享Adaptive Cursor Sharing或扩展的游标共享(Extended Cursor Sharing)是Oracle 11g的新特性之一,主要用于解决以前版
本中由于绑定变量窥探导致SQL语句无法获得最佳执行计划的缺陷,即能够对效率低下的游标(子游标)进行自动识别而选择最佳的执行计划。本
文详细描述了自适应游标共享并给出示例。
有关绑定变量窥探请参考:Oracle 绑定变量窥探

一、示例自适应游标共享
1、创建演示环境

2、使用绑定变量执行SQL语句并获得首次执行情况

3、自适应游标共享的外在体现
自适应游标共享主要通过三个字段来得以体现,即is_bind_sensitive,is_bind_aware,is_shareable。(注:此三个字段仅在Oracle 11g
中存在)。通过上面从v$sql(v$sqlarea中不存在is_shareable)的查询可知,三个字段分别被赋予了不同的值,代表了不同的含义。

is_bind_sensitive(绑定是否敏感)
表示该子游标中是否使用了绑定变量要素,且采用bind peeking方法进行执行计划生成。如果执行计划依赖于窥探到的值,此处为Y,
否则为N。

is_bind_aware(绑定是否可知)
表示该子游标是否使用了extended cursor sharing技术,是则为Y,否则为N,如为N,则该游标将废弃,不再可用。

is_shareable(是否可共享)
表示该子游标可否被下次软解析是否可共享使用。可共享则为Y,否则为N,表示该子游标失去了共享价值,按LRU算法淘汰。

由于该SQL语句为首次执行,因此从v$sql查询的结果中得知
is_bind_sensitive 为Y值(首次运行,执行了bind peeking)
is_bind_aware 为N值(首次运行,不被extended cursor sharing支持)
is_shareable 为Y值(执行计划可共享)

4、重新赋值后观察游标共享情况

二、自适应游标共享的几个相关视图

1、v$sql_cs_statistics
用于监控自适应游标共享的相关统计信息.下面的查询中列出了每个子游标的peeking情况,以及执行次数,预处理行数,BUFFER_GETS等

2、v$sql_cs_selectivity
显示每个子游标的游标的选择性范围。下面的查询中列出了谓词,选择性范围,列上的选择性的值

3、v$sql_cs_histogram
用于决定一个查询是否允许自适应游标共享,以直方图形式存储

三、总结
1、自适应游标共享在SQL语句首次执行时(使用绑定变量),进行窥探,并记录窥探结果,如果后续有相同的的SQL语句执行,则对窥探结果
进行比较以判断是否需要生成新的执行计划。此即为绑定变量是否敏感。
2、绑定变量的可知性用于判断当前的游标是否为可扩展性游标共享,当不可知时,则游标被废弃。
3、自适应游标共享的实质是在Oracle 10g以前的基础上实现了多次绑定变量窥探,增加了获取最佳执行计划选择的机率。
4、尽管使用自适应游标共享特性,但并不能保证每次执行SQL语句一定按最佳计划执行,本次演示中SQL语句的第二次执行并非最佳执行计划。
5、自适应游标共享也不能保证两次执行相同SQL语句一定按相同的执行计划执行,因为自适应游标共享会不断尝试peeking。

四、延伸参考
Oracle 绑定变量窥探
Oracle自适应共享游标
绑定变量及其优缺点

父游标、子游标及共享游标
dbms_xplan之display_cursor函数的使用
dbms_xplan之display函数的使用
执行计划中各字段各模块描述


分享到:
评论

相关推荐

    Oracle SQL Tuning with Oracle SQLTXPLAIN.pdf

    自适应游标共享是Oracle数据库中的一项特性,它允许相似的SQL语句共享相同的执行计划。这有助于减少内存占用并提高系统性能。本章探讨了如何充分利用自适应游标共享的优势,并避免可能出现的问题。 #### 第八章:...

    oracle 11i 实用大全 5

    Oracle 11i引入了一系列性能优化特性,包括自动内存管理(Automatic Memory Management)、自适应游标共享(Adaptive Cursor Sharing)和实时自动统计信息(Real-Time Automatic Statistics)。这些特性旨在减少手动...

    oracle内存资源分配

    首先,SGA是Oracle数据库运行时共享内存的主要区域,它包含了多个组件。其中,Buffer Cache存储了从磁盘读取的数据块,以减少I/O操作,提高数据访问速度。Redo Log Buffer用于暂存事务的更改信息,确保数据一致性。...

    Oracle.v10g-实用培训教程1

    3. **优化的性能**:通过SQL优化、自适应游标共享、分区表等技术,提高了查询速度和系统响应时间,减少了维护成本。 4. **简化管理**:Oracle企业管理器(OEM)提供了统一的管理界面,支持远程监控和管理多个数据库...

    oracle 11g新特性

    ##### 2.1 Adaptive Cursor Sharing (自适应游标共享) Adaptive Cursor Sharing 是Oracle 11g中的一个重要特性,它允许数据库动态地合并那些语义相同但语法略有不同的SQL语句的执行计划,从而减少内存占用并提高查询...

    Oracle 9i 10g编程艺术:深入数据库体系结构

    此外,编程艺术这一主题涵盖了PL/SQL编程,包括过程、函数、触发器和游标的使用,以及如何通过PL/SQL与Oracle的其他组件(如存储过程、包和数据库链接)交互。书中可能还会涉及Oracle的SQL*Plus工具,以及如何编写...

    oraclE培训教程

    6. **Real Application Clusters (RAC)**:Oracle 9i RAC允许在多台服务器上共享同一个数据库实例,提供故障切换和负载均衡,极大地提高了系统的可用性和性能。 7. **Advanced Security Option (ASO)**:ASO提供了...

    oracle 9i杂记

    5. **游标和PL/SQL**: PL/SQL是Oracle的面向过程的编程语言,它允许编写存储过程、触发器和函数,而游标则是处理多行结果集的关键工具。 6. **SQL*Plus**: Oracle提供的命令行工具,用于执行SQL和PL/SQL,进行...

    Oracle 10g R2 Concepts双语版

    PL/SQL是Oracle的编程语言,扩展了SQL,提供了过程、函数、游标、异常处理等高级特性,用于编写数据库应用程序。 四、表与索引 表是数据的主要容器,可以有多种分区策略(如范围、列表、哈希等)以优化查询性能。...

    Oracle9i的init.ora参数中文说明

    Oracle9i初始化参数中文说明 Blank_trimming: 说明: 如果值为TRUE, 即使源长度比目标长度 (SQL92 兼容) 更长, 也允许分配数据。 值范围: TRUE | FALSE 默认值: FALSE serializable: 说明: 确定查询是否获取表级...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    不同的Webview之间无法共享数据。(3)页面自适应问题。页面难以兼容适应不同分辨率的设备和浏览器。 本文研究并设计了基于Android+HTML5的在线认证检测系统,主要工作包括以下四个方面: (1)针对多窗口类浏览器...

Global site tag (gtag.js) - Google Analytics