Library Cache优化与SQL游标

xiaoxiao2021-02-28  86

点击查看全文

Dear 跟着小编一起读好书运动开始啦!咱们作为DBA不仅要外部打扮自己,更要从内部武装。近期,小编将分享冷菠老师的《Oracle高性能自动化运维》一部分精选章节分享给大家。如果你对内容很感兴趣,还是要去买一本比较好哦。 冷菠 冷菠,网名悠然(个人主页http://www.orasky.net ),资深DBA,著有《Oracle高性能自动化运维》,有近10年的数据库运维、团队管理以及培训经验。曾担任美资企业Senior DBA职务、支付公司数据库团队负责人,现为培训机构重庆优唯佳科技公司技术合伙人。 擅长数据库备份恢复、数据库性能诊断优化以及数据库自动化运维等,对主机存储、网络、系统业务架构设计优化、大数据等领域有较为深入的研究。目前致力于大数据、智能一体化、开源云计算等领域的佳实践探索。

Library Cache主要用于存放SQL游标,而SQL游标最大化共享是Library Cache优化的重要途径,可以使SQL运行开销最低、性能最优。

SQL语句与父游标及子游标

在PL/SQL中,游标(Cursor)是数据集遍历的内存集合。而从广义上讲, 游标是SQL语句在Library Cache中的内存载体。

SQL语句与游标关系如下:

1.一条SQL语句包含一个父游标(Parent Cursor)和一到多个子游标(Child Cursors),如图2-2所示。 图2-2 SQL语句与游标 2.SQL语句通过SQL_ID唯一标识父游标,如下所示:

从上述示例可以看出,SQL语句使用SQL_ID唯一标识父游标(V$SQLAREA),同时该SQL语句仅包含一父游标和一个子游标。

3.不同的SQL语句的父游标也不同,如下所示:

可以看出,2个不同SQL语句对应的SQL_ID也不相同,产生了不同的父游标。

小提示

当SQL语句父游标不相同,其对应的子游标也肯定不同。

父游标

1.父游标特点

父游标的主要特点如下:

q 父游标是由SQL语句决定; q 父游标使用SQL语句的SQL_ID唯一标识; q 父游标包含一到多个子游标; q 父游标与参数cursor_sharing紧密相关。

2.父游标组成结构

父游标的主要组成结构如表2-2所示:

表2-2 父游标组成结构

父游标组成结构单元之间的关系,如图2-3所示:

图2-3 父游标组成结构

3.父游标相关查询

父游标信息可以通过V$SQLAREA视图进行查询。

V$SQLAREA主要特点有:

V$SQLAREA中一条记录表示一个父游标,如下所示:

可以看出在V$SQLAREA视图中,SQL_ID是唯一的,从侧面也可以说V$SQLAREA中一条记录代表一个父游标。

V$SQLAREA只包含父游标的相关信息。

4.父游标相关参数

参数cursor_sharing决定父游标被共享的模式,用于减少解析带来的开销,提升SQL执行效率。

cursor_sharing的3种模式:

EXACT (默认模式),如下所示:

FORCESIMILAR

接下来对3种模式进行详细介绍。

cursor_sharing= EXACT

默认模式。只有SQL语句内容完全一样,才会共享父游标(SQL语句之间才会共享)。也就是说,当用户端发起的SQL语句只要有一点不相同,就会产生不同的父游标,从而不会共享SQL父游标。如下所示:

cursor_sharing = FORCE

当模式设置为FOCE时,将会强制优化器共享父游标,而不管执行计划是否最优。当条件允许时,可以采用这种方式来减少解析开销。如下所示:

点击查看全文

转载请注明原文地址: https://www.6miu.com/read-36411.html

最新回复(0)