17
第 17 章 Shared Pool 原理及性能分析
hared Pool 是 Oracle SGA 设置中最复杂也是最重要的一部分内容,Oracle 通过 Shared Pool
来实现 SQL 共享、减少代码硬解析等,从而提高数据库的性能。在某些版本中,如果设置不当,
Shared Pool 可能会极大地影响数据库的正常运行。
S
本章就 Shared Pool 的原理及性能问题进行深入探讨,并通过几个具体案例介绍相关性能问
题的诊断及解决方法。
17.1 Shared Pool 的基本原理
在 Oracle 7 之前,Shared Pool 并不存在,每个 Oracle 连接都有一个独立的 Server 进程与
之相关联,Server 进程负责解析和优化所有 SQL 和 PL/SQL 代码。典型的,在 OLTP 环境中,很多
代码具有相同或类似的结构,反复的独立解析浪费了大量的时间以及资源,Oracle 最终认识到这
个问题,并且从 PL/SQL 开始尝试把这部分可共享的内容进行独立存储和管理,于是 Shared Pool
作为一个独立的 SGA 组件开始被引入,并且其功能和作用被逐渐完善和发展起来。
在这里注意到,Shared Pool 最初被引入的目的,也就是它的本质功能在于:实现共享。如
果系统代码是完全异构的(假设你的代码从不绑定变量,从不反复执行),那么会发现,这时候
Shared Pool 完全就成为了一个负担,它在徒劳无功地进行无谓的努力:保存代码、执行计划等
期待重用,并且客户端要不停的获取 Latch,试图寻找共享代码,却始终一无所获。如果真是如
此,那这是我们最不愿看到的情况,Shared Pool 变得有害无益。当然这是极端,可是在性能优
化中会发现,大多数性能低下的系统都存在这样的通病:代码极少共享,缺乏或从不实行变量绑
定。优化这些系统的根本方法就是优化代码,使代码(在保证性能的前提下)可以充分共享,减
少无谓的反复硬/软解析。
实际上,Oracle 引入 Shared Pool 就是为了帮助实现代码的共享和重用。了解了这一点之后,
开发人员在应用开发的过程中,就应该有意识地提高自己的代码水平,以期减少数据库的压力。
这也应该是对开发人员的最初和最基本的要求。
17.2 Shared Pool 的设置说明
Shared Pool 的大小通过初始化参数 shared_pool_size 设置。