为了对ORACLE数据库有一个基本的了解,我们首先需要理解ORACLE的内存结构。
可以大体上将ORALCE内存分为以下几类:
- System Global area(SGA)
一组共享内存结构,包含数据库实例的数据以及控制信息。 - Program global area(PGA)
进程或者线程独占的内存结构。当ORACLE进程启动时分配该内存。 - User global area(UGA)
与用户会话相关的内存结构。 - Software code areas
用于存储正在运行或可能运行的代码的内存区域。
oracle整体内存结构如下图
UGA-User Global Area
UGA是一块用来存储会话状态相关的内存区域。取决于是否通过shared server模式连接,它可能存在于SGA或者PGA中。
Shared Server – UGA存在于SGA中
Dedicated Server – UGA存在于PGA中
PGA-Program Global Area
PGA是特定于操作系统进程或线程的内存。下图是dedicated server模式下PGA包含的区域——SQL工作区、私有SQL区和会话内存(在shared server模式下私有SQL区存在于SGA中):
私有SQL区
存储变量的绑定信息以及运行时的内存结构。在dedicated server模式下该内存区域位于PGA中,但是在shared server模式下在SGA中。该内存区域由客户端管理该区域的创建,服务器端的OPEN_CURSORS参数限定可分配的上限。
- persistent area
存储变量绑定的值,当游标关闭时释放该区域内存。 - run-time area
当发起query execute请求时,首先会创建该区域,用于存储相关状态信息。例如,做全表扫描时,已检索的行数。
SQL工作区
用于排序、位图合并、哈希连接等内存密集型的操作,这些操作会首先在SQL WORK AREA中进行,当分配的内存空间不足时将部分数据写入磁盘的TEMPSPACE表空间。
SGA-System Global Area
SGA属于数据库实例的一部分。可通过V$SGASTAT
查看各个内存区域的基本信息。
Database Buffer Cache
用于缓存当前或最