频道栏目
读书频道 > 数据库 > Oracle > Oracle 11g数据库基础与应用教程
2.3.2 内存结构
2013-03-09 13:11:43     我来说两句
收藏   我要投稿
Oracle是数据库领域最优秀的数据库系统之一,本书以Oracle 11g为蓝本,系统地讲述了数据库的原理、Oracle 11g的功能和应用。全书共分11章,在讲述数据库原理的基础知识和数据库结构化查询语言SQL的同时,详细地...  立即去当当网订购

Oracle内存结构主要可以分为SGA(System Global Area)与PGA(Program Global Area),如图2.5所示。


 

1.全局共享区

全局共享区SGA(System Global Area)是一块巨大的共享内存区域,被看作是Oracle数据库的一个大缓冲池,这里的数据可以被Oracle的各个进程共用。SGA主要包括以下几个部分。

(1) 共享池(Shared Pool)

共享池保存了最近执行的SQL语句、PL/SQL程序和数据字典信息,是对SQL语句和PL/SQL程序进行语法分析、编译、执行的内存区。共享池主要又可以分为库高速缓存区和数据字典高速缓冲区两个部分。

库高速缓存区(Library Cache):解析用户进程提交的SQL语句或PL/SQL程序和保存最近解析过的SQL语句或PL/SQL程序。Oracle DBMS执行各种SQL、PL/SQL之前,要对其进行语法上的解析、对象上的确认、权限上的判断、操作上的优化等一系列操作,并生成执行计划。因为库高速缓存区保存了已经解析的SQL和PL/SQL,所以,请尽量使用预处理查询。

数据字典高速缓冲区(Data Dictionary Cache):在Oracle运行过程中,Oracle会频繁地对数据字典中的表、视图进行访问,以便确定操作的数据对象是否存在、是否具有合适的权限等信息。数据字典缓存了最常用的数据字典信息。数据字典缓存中存放的记录是一条一条的,而其他缓存区中保存的是数据块。

(2) 数据缓存区(Database Buffer Cache)

该缓存区保存最近从数据文件中读取的数据块,其中的数据被所有用户共享。这个缓冲区的块基本上在两个不同的列表中管理:一个是块的“脏”表(Dirty List),需要用数据库块的书写器(DBWR)来写入;另外一个是不脏的块的列表(Free List)。一般的情况下,会使用最近最少使用(Least Recently Used,LRU)算法来管理。

该缓存又可以细分为以下3个部分:Default Pool、Keep Pool、Recycle Pool。如果不是人为设置初始化参数(Init.ora),Oracle将默认为Default Pool。由于操作系统寻址能力的限制,不通过特殊设置,在32位的系统上,块缓冲区高速缓存最大可以达到1.7GB,在64位系统上,块缓冲区高速缓存最大可以达到10GB。

(3) 重做日志缓冲区(Redo Log Buffer)

重做日志文件的缓冲区,对数据库的任何修改都按顺序记录在该缓冲区中,然后由LGWR进程将它写入磁盘。这些修改信息可能是DML语句,如Insert、Update、Delete,或DDL语句,如Create、Alter、Drop等。

为什么需要有重做日志缓冲区的存在?这是由于内存到内存的操作比内存到硬盘操作的速度快很多,所以重作日志缓冲区可以加快数据库的操作速度,但是考虑到数据库的一致性与可恢复性,数据在重做日志缓冲区中的滞留时间不会很长。重作日志缓冲区一般都很小,大于3MB之后的重作日志缓冲区已经没有太大的实际意义。

(4) Java池(Java Pool)

Oracle 8i以后的版本提供了对Java的支持,用于存放Java代码、Java程序等。一般不小于20MB,以便虚拟机运行。如果不用Java程序,没有必要改变该缓冲区的默认大小。

(5) 大型对象池(Large Pool)

大对象池的得名不是因为大,而是因为它用来分配大块的内存,处理比共享池更大的内存,在8.0版开始引入。大型池用于大内存操作,提供相对独立的内存空间,以便提高性能。大型池是可选的内存结构。DBA可以决定是否需要在SGA中创建大池。需要大型池的操作有:数据库备份和恢复、大量排序的SQL语句、并行化的数据库操作。

下面的对象使用大对象池:

MTS——在SGA的Large Pool中分配UGA。

语句的并行查询(Parallel Execution of Statements)——允许进程间消息缓冲区的分配,用来协调并行查询服务器。

备份(Backup)——用于RMAN磁盘I/O缓存。

2.程序共享区

程序共享区PGA(Program Global Area)是用户进程连接到数据库并创建一个对应的会话时,由Oracle为服务进程分配的,专门用于当前用户会话的内存区。PGA是非共享的,而SGA是共享的。PGA大小由操作系统决定,并且分配后保持不变;会话终止时,自动释放PGA所占的内存。程序共享区由排序区、会话区、游标区和堆栈区组成。

排序区用于保存执行order by、group by等包含排序操作的SQL语句时所产生的临时数据。Oracle将准备排序的数据先临时存储到排序区中,并在排序区中排序,然后将排序好的数据返回给用户。

会话区保存会话所具有的权限、角色和性能等统计信息。

游标区当运行带有游标的PL/SQL语句时,Oracle会在共享池中为该语句分配上下文(Context),游标实际上是指向该上下文的指针。

堆栈区保存会话中的绑定变量、会话变量以及SQL语句运行时的内存结构信息。

您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:2.3.1 存储结构
下一篇:2.3.3 进程结构
相关文章
图文推荐
排行
热门
最新书评
特别推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站