首页 > 数据库 > Oracle > oracle 内存结构
1.基础结构
oracle内存结构主要包括四部分:SGA(系统全局区)PGA(程序全局区)UGA(用户全局区)和软件代码区域。
其中,
SGA:主要存放oracle的共享数据和控制信息。该区域被所有的服务器进程和后台进程共享。
PGA:存放某一个oracle进程的数据和控制信息,这些进程可以是服务器进程,也可以是后台进程。
UGA:存放与用户会话信息有关的内容,例如用户登录信息等。UGA由两部分组成:session variable 和OLAP POOL。
在共享服务器模式下,UGA在SGA中存在,而在专用服务器模式下,UGA在PGA中存在。原因是UGA存放着用户会话的信息,该区域需要在会话的整个生命周期内都是可用的。共享服务器模式下,UGA需要记录多个用户的信息,而PGA是每个进程专有区域,无法实现记录多用户会话信息功能,而SGA是所有进程共享的,所以共享模式下,UGA存在于SGA中。
软件代码区域:主要存放oracle软件运行所需要的代码,该内存区域和其他内存区域分开,单独存在。
2.内存管理方式
主要包括:自动内存管理、自动共享内存管理和手工内存管理
其中,
自动内存管理:指定实例将用到的内存总大小,实例将会自动在SGA和PGA之间进行分配。
自动共享内存管理:该管理方式为部分自动化,即设置SGA大小,并可选的设置PGA大小。让SGA内存自动管理的同时单独对PGA进行管理。
手工内存管理:通过初始化参数,手工管理SGA和PGA。
3.PGA
PGA理解:打个比喻,PGA就像是文档管理员的临时工作空间。而文档管理员就代表着替客户端进程(client process)干活的服务器进程(server process)。服务器进程创建后,在PGA中分配一块内存,用于存放用户请求的具体信息,并将用户请求的结果进行排序,结果返回后,释放工作空间。
PGA的内容:SQL WORK AREA(排序区、HASH区、位图合并区)、session memory和private SQL area(persistent area和runtime area)
其中,
private SQL area:存放已经解析的SQL语句和会话相关的信息。当一个服务器进程执行SQL或者PL/SQL代码的时候,服务器进程使用private SQL area来存储绑定变量的值(persistent area,只有当游标关闭,才释放该区域),查询执行的状态信息和查询执行工作区域(runtime area,DML中,语句结束,则该区域释放)。
SQL work area:该区域主要存放内存密集型的操作,比如排序,hash连接,位图连接等。
当启用PGA自动内存管理时,数据库会自动调整SQL work area的大小。
共享服务器模式和专用服务器模式下的PGA内存分配:
|
Memory area |
Dedicated server |
Shared server |
|
Nature of session |
Private |
Shared |
|
Location of the persistent area |
PGA |
SGA |
|
Location of the run-time area for DML/DDL statements |
PGA |
PGA |
4.SGA
SGA是随着数据库实例后台进程启动而启动的。当然,服务器进程也可以访问SGA,其只是在数据库操作时,可以往里面写内容。
每个实例都有自己的SGA(RAC环境具有多个实例,多个SGA)。
SGA的主要组件:database buffer cache/ redo log buffer/ shared pool/ large pool/ java pool/ stream pool/ fixed SGA
5.软件代码区域
软件代码区域是存储正在运行或准备运行的代码的一块内存区域,这块区域比较特殊,被oracle区别于用户程序单独存放并保存起来。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30167136/viewspace-1558279/ ,如需转载,请注明出处,否则将追究法律责任。