众所周知,无论个人计算机或企业服务器,影响其运行性能的三大重要因素是:CPU、内存、存储;那么在这些硬件上运行的数据库性能的基础也应是这三大要素,oracle 数据库在内存上是怎样分配和运行的?今天就来扒一扒它的内存结构。
基本内存结构
与Oracle数据库相关的基本内存结构包括:
系统全局区域 System Global Area(SGA)
SGA 是一组共享内存结构,包含一个 Oracle 数据库实例的数据和控制信息。SGA 由所有服务器和后台进程共享。存储在 SGA 中的数据包括高速缓存的数据块和共享 SQL 区域。
项目全局区域 Program Global Area(PGA)
PGA是一个非共享内存区域,它包含专门供 Oracle 进程使用的数据和控制信息。PGA 由 Oracle 数据库在 Oracle 进程启动时创建。
每个服务器进程和后台进程都有一个 PGA ,单个 PGA 的集合是 PGA 的总实例,或者实例 PGA。数据库初始化参数设置实例 PGA 的大小,而不是单个的 PGA。
用户全局区域 User Global Area(UGA)
专用服务器模式下,进程和会话是一对一的关系,UGA 被包含在 PGA 中,在共享服务器模式下,进程和会话是一对多的关系,所以 UGA 就不再属于 PGA 了,而会在大型池 Large Pool 中分配。但如果从大型池中分配失败,如大型池太小,或是根本没有设置大型池,则从共享池 Shared Pool 中分配。
软件代码区域 Software Code Areas(SCA)
软件代码区域是用于存储正在运行或可以运行的代码的内存部分。Oracle 数据库代码存储在软件区域,该区域通常位于与用户程序不同的位置 - 更独特或受保护的位置。