2022年父子游标详解 .pdf
《2022年父子游标详解 .pdf》由会员分享,可在线阅读,更多相关《2022年父子游标详解 .pdf(5页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、当 Client 与 Server Process建立了 连接, 构成一次 会话 session之后。客 户端就可以 输入SQL 语句, 对数据 库数据进行操作了。2、解析 SQL,执行操作SQL 语句是描述性 语句。我 们使用 SQL 的 时候,只是去描述我们需要 数据的特征,而不是确定 数据获取的 执 行方法。任何一 条 SQL 语句执行,都是通 过解析、 执 行和 获取三 个主要步 骤,若干 个子步 骤组 成。解析 parse 任何 SQL 语 句,在 Oracle 环境下都是 处理为游标 cursor 。对 SQL 语句的 处理, 实际上就是对 cursor 的 处理。Oracle 处
2、理 SQL 语句,首先要 检查 SGA 区中的 shared pool子区,看里面是否存在相同SQL 的父游 标子游 标。查询 的依据, 就是 SQL 语句本身(以及其hash 值生成的sql_id )。每一 个在 Oracle 中执行的 SQL 语句,都需要在shared pool中建立一 个父游标和子游 标的对。父游 标对应 的是所有相同SQL 语句的游 标, 都可以共享 该父游标。 在同一 个父游 标下,允许 有多 个子游 标 , 他们表示 SQL 语句在不同 执行用 户、 不同 优化器模式和 环境等因素下,对应 的不同的 执行 计划 。SQL 在 Share Pool中寻 找的共享 C
3、ursor , 就是 寻找相同的子游标项(前提肯定是在sql_id已经一样就是说父游标已经共享了),目的是 为了共用 执行计划 。软解析:一条 SQL 语 句, 通 过语 法检查 后。 如果可以在shared pool中寻找到可共享的子游标对象,就可以 实现执 行计划 的共享。 这个过 程,我们称为软 解析。 找到相同的父游标是不够的,要找到相同的子游标才行,父游标表示的就是sql text一直,子游标代表了要考虑到执行环境优化器模式不同用户等,能共享子游标才能进行软解析,当然这个前提是父游标已经可以共享了,也就是说最终的意思是达到共享父子游标。硬解析:名师资料总结 - - -精品资料欢迎下载
4、 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 5 页 - - - - - - - - - 如果 没有在 shared pool中寻找到相同可共享的游标记录 。那么,首先向 实例申请,要求SGA 中分配空 间和资源, 进行 SQL 语 句的分析解析工作。这部分通常需要分配内存空 间,以装 载生成的父子游 标记录 。我 们称这个过 程为硬解析。相对 于软解析, 硬解析需要消耗更多的系统资 源。更重要的是,在 进行硬解析的 过程中, 对SQL 涉及到的 数 据库对 象,可能都有 锁或者 latch 的操作。 这样
5、是不利于 实现多用 户并发 的数据 库系统的。所以,一般我们都 尽量避免硬解析,尽可能实现 游标共享。当然, 软解析也不是 绝对 完美的 选择 。在一些高 并发 、高处理量的系 统中,绝对 的游 标共享也是可能引起性能瓶颈 的。所以,一些时候还要人 为避免 软解析的 发生。实现 游标共享的最常用 技术就是 绑 定变量,通 过绑 定变量,可以 实现类 似业务操作 SQL 的共享。也就是一 种软 解析技 术。 但是,绑定变量最大的 问题 也就是 peeking , 在实际 系统中,也是要仔 细区别 斟酌的。对 SQL 语句的解析后, Oracle 要使用 优 化器生成 对应 的执行计划。目前,最常
6、用的就是CBO(基于成本的 优 化器)。优化器的原理比较复杂 ,是 Oracle 核心技 术之一。简单 的说,Oracle 会用不同的方法 (自 动收集、 作业脚本) ,收集数据表、索引的 统计信息, 作为 CBO工作的依据。之后,对一个 SQL,Oracle 会 制定出多 种执行路 径方法,分 别计算每 个路径方法的 执行成本(估算),最后确定成本最低的执行计划 作为实际执 行计划 。一旦一 条 SQL 的执行计划 确定之后, shared pool里的游 标记录 就和这个执 行计划连 接起来。下次再有相同子游标的 SQL,则直接使用 这个执 行计划。1. 父游 标和子游 标动态 性能 视图
7、1. v$sql, v$sqlarea, v$sql_shared_cursor 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 5 页 - - - - - - - - - 当用户发 出 sql 语句, oracle 会根据 该 sql 的文本信息 :sql text生成的 hash_value or sql_id(10g )去shared_pool中去 寻找是否有相同的sql ,如果 没有, 则为该 sql 语句生成一 个父游 标(father cursor)和一个子游
8、 标(child cursor). 父游 标和 v$sqlarea关联 , 该视图 的每一行表示了一个父游 标, 其中的 version_count这一列表示 该父游 标含有 对应 的子游 标的个数 ,父游 标包含的信息主要是sql text 。子游 标和 v$sql 关联 ,该视图 的每一行表示了一个子游 标,子游 标包含的信息主要是该 sql 语句执行的 环境信息,如 执行计划 等. 如果要共享父子游标,实现软 解析,在父游 标可以共享,即sql 的文本完全相同的情况下,能否 实现 共享取决于子游 标,即 sql 的执行环境。 不能共享 (mismatch)的信息可以在v$sql_shar
9、ed_cursor这个视图 中看到,比 较常见的情 况有: 1. optimizer_mismatch: 即优化器的模式不同,比如设置成 all_rows, first_row(n) 2. transaction_mismatch: 事务不同,如不同的用户在相同的其他 条件下 执行完全相同的sql 语句3. auth_mismatch : 授权不同 , 同上4. bind_mismatch : 绑定变量不同,很典型的情况是变量的 长度发生了 变化. SQL show parameter cursor_sharing; NAME TYPE VALUE - - - cursor_sharing s
10、tring EXACT SQL select * from emp where empno=7499; SQL select * FROM emp where empno=7499; SQL select * FROM EMP WHERE empno=7499; SQL select * from emp where empno=7499; 查看父游标SQL selectsql_id, sql_text, executions, version_count from v$sqlarea where sql_text like %7499%; SQL_ID SQL_TEXT EXECUTIONS
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年父子游标详解 2022 父子 游标 详解
限制150内