查看帖子 软件研发|项目外包|人才外包|软件技术咨询培训
在线客服
       
版区名称:数据库       版主: 林飞 快速返回
发言人:
林飞( 在线 )
等级:骑士

注册时间:2002年1月27日
文章主题: Oracle内存结构与实例及其管理
http://www.deepbluesoft.com 2008年06月26日 16:25 《程序员》
  1、 内存结构:

  Oracle数据库的总体结构如下图:

  每个Oracle数据库都是由Oracle Instance(实例)与数据库(数据文件,控制文件、重做日志文件)组成,其中所谓实例就是用户同数据库交互的媒介,用户通过于一个实例相连来操作数据库。而实例又是由统一的内存结构(SGA,PGA,UGA)和一批内存驻留进程组成。实例在操作系统中用ORACLE_SID来标识,在Oracle中用参数INSTANCE_NAME来标识, 它们两个的值是相同的。数据库启动时,系统首先在服务器内存中分配系统全局区(SGA), 构成了Oracle的内存结构,然后启动若干个常驻内存的操作系统进程,即组成了Oracle的 进程结构,内存区域和后台进程合称为一个Oracle实例。

  实例结构如下图:

  1.1内存对数据库的影响:

  内存是影响数据库性能的重要因素,Oracle8i使用静态内存管理,Oracle 10g使用动态 内存管理。所谓静态内存管理,就是在数据库系统中,无论是否有用户连接,也无论并发用 量大小,只要数据库服务在运行,就会分配固定大小的内存;动态内存管理允许在数据库服 务运行时对内存的大小进行修改,读取大数据块时使用大内存,小数据块时使用小内存,读 取标准内存块时使用标准内存设置。

  1.2 SGA内部结构及管理:

  SGA是一组为系统分配的共享的内存结构,可以包含一个数据库实例的数据或控制信 息。如果多个用户连接到同一个数据库实例,在实例的SGA中,数据可以被多个用户共享。 当数据库实例启动时,SGA的内存被自动分配;当数据库实例关闭时,SGA内存被回收。 SGA是占用内存最大的一个区域,同时也是影响数据库性能的重要因素。

  通过下面的语句查询

  SQL > show parameter sga NAME TYPE VALUE ------------------------------------ ----------- -------- lock_sga boolean FALSE pre_page_sga boolean FALSE sga_max_size big integer 164M sga_target big integer 0

  其中:sga_max_size的大小是不可以动态调整的。

  如:

  SQL > alter system set sga_max_size=100m; alter system set sga_max_size=100m * ERROR at line 1: ORA-02095: specified initialization parameter cannot be modified

  系统全局区按作用不同可以分为: ?数据缓冲区 ?日志缓冲区 ?共享池

  大池

  Java池

  其中后两项为可选项。

  1.2.1 数据缓冲区(Database Buffer Cache) 如果每次执行一个操作时,Oracle都必须从磁盘读取所有数据块并在改变它之后又必须把每一块写入磁盘,显然效率会非常低。数据缓冲区存放需要经常访问的数据,供所有用户使用。修改数据时,首先从数据文件中取出数据,存储在数据缓冲区中,修改/插入数据也存储在缓冲区中,commit或DBWR(下面有详细介绍)进程的其他条件引发时,数据被写入数据文件。数据缓冲区的大小是可以动态调整的,但是不能超过sga_max_size的限制。





————————————————
 
快速返回
回复主题:
回复内容: