甲骨文内存结构和进程结构

  

一、内存结构

  

在甲骨文数据库系统中内存结构主要分为系统全局区(SGA)和程序全局区(PGA), SGA随着数据库实例的启动向操作系统申请分配一块内存结构,随着数据库实例的关闭释放,每一个Oracle数据库实例有且只有一个SGA.PGA随着甲骨文服务进程启动的时候申请分配的一块内存结构。如果在共享服务结构中PGA存在SGA中。在后面我们将表述各个部件

  

1,系统全局区(SGA)

  

重要提示,提高SGA的大小可以在一定程度上提高甲骨文数据库系统的性能,但你设置SGA的值如果不能锁定在内存物理页上,有些部分可能被交换到系统的交换文件中。这样你的甲骨文数据库系统将变慢。系统全局区是一组包含数据和控制信息的共享内存结构,允许甲骨文服务的众多后台进程同时访问或修改其中的数据,所以有些时候也被称为“全局共享区”,参数文件中的SGA_MAX_SIZE指定SGA动态大小。
<强>系统全局区由以下主要几个部分组成:
※共、享池SharedPool
※数、据高速缓存DatabaseBufferCache
※重、做日志缓存RedoLogBufferCache
※Java、池(可选)JavaPool
※大、池(可选)LagerPool

  

共享池

  

共享池存储了最近多数使用的执行SQL语句和最近使用的数据定义。它包含库高速缓存器和数据字典缓存器这两个与性能相关的内存结构。共享池的大小可以通过初始化参数文件(通常为init.ora)中的SHARED_POOL_SIZE决定。共享池是活动非常频繁的内存结构,会产生大量的内存碎片,所以你要确保它尽可能足够大。
库高速缓存器,他又包含共享SQL区和共享PL/SQL区两个组件区。为了提高SQL语句的性能,在提交SQL语句或PL/SQL程序块时甲骨文服务器将先利用最近最少使用(LRU)算法检查库高速缓存中是否存在相同的SQL语句或PL/SQL程序块,若有则使用原有的分析树和执行路径。
数据字典缓存器,它收集最近使用的数据库中的数据定义信息。它包含数据文件,表,索引,列,用户,访问权限,其他数据库对象等信息。在分析阶段决定数据库对象的可访问信息。利用数据字典缓存器有效的改善了响应时间。它的大小由共享池的大小决定。

  

数据高速缓存

  

它存储数据文件中数据块的拷贝。利用这种结构使数据的更新操作性能大大的提高。数据高速缓存中的数据交换同样采用最近最少使用算法(LRU)。它的大小主要受到DB_BLOCK_SIZE决定。数据高速缓存它由DB_CACHE_SIZE, DB_KEEP_CACHE_SIZE, DB_RECYCLE_CACHE_SIZE这些独立的子缓存器构成,同时它能动态的增长或收缩。

  

重做日志缓存

  

重做日志缓存器是个环状的缓存器,它记载所有数据的改变,主要目的用于恢复。改变后的记录内部称为重做条目,重做条目包含重构或重做信息。它的大小由初始化参数中的LOG_BUFFER决定。重做日志缓存尺寸若太小会导致进程竞争,并引起写日志进程之间的竞争。

  Java池

  

Java池是在安装使用Java后,才在SGA中出现的一个组件,它的大小由JAVA_POOL_SIZE初始化参数决定. Java池为执行Java命令提供分析与执行内存空间。

  

大池

  

数据库管理员可以可选配置被称为大池的内存区,它主要用于存储为共享服务器保存会话信息,I/O服务进程,甲骨文备份与恢复操作,并行的消息缓存等内容。值得一提的是大池不像其他内存组件中存在LRU列表。

  

2,程序全局区PGA

  

程序全局区用于保存每一个用户连接到数据库的信息。连接到数据库的信息主要有回话信息,排序信息和游标信息等三方面。

  

二、进程结构

  

甲骨文的进程主要分为用户进程,服务进程和后台进程三类。用户进程运行在应用或Oracle工具中,服务进程在一个Oracle数据库实例启动后当一个用户建立连接后创建的;后台进程则完成不同特定任务的一些进程。
<强>甲骨文的后台进程如下:
※写、数据DatabaseWriter (DBW0或DBWn);
※写、日志LogWriter (LGWR);
※检、查点检查点(CKPT);
※系、统监视SystemMonitor (SMON);
※进、程监视ProcessesMonitor (PMON);
※归、档存档(ARCn);
※恢、复恢复(侦察);
※锁、管理服务LockManagerServer (LMS)——仅在RealApplicationClusters;
※队、列监视QueueMonitor (OMNn);
※调、度调度程序(Dnnn);
※服、务服务器(Snnn);

  

1,写数据(DBWn)

  

数据写进程负责将重写块(dirtyblock)从数据高速缓存中写到磁盘上的数据文件里。为了使数据库的性能受I/O限制降到最低,DBWn不是每一个块修改时立即写到磁盘上,而是等到符合一定条件后读取高速缓存中的重写块列表,并将其指定的块成批地写到数据文件中。

甲骨文内存结构和进程结构