Oracle系统全局区(SGA)介绍
系统全局区(System Global Area)是所有用户进程共享的一块内存区域,也就是说,SGA中的数据资源可以被多个用户进程共同使用。SGA主要由高速数据缓冲区、共享池、重做日志缓冲区、java池和大型池等内部结构组成。SGA随着数据库实例的启动而加载到内存中,当数据库实例关闭时,SGA区域也就消失了。
高速数据缓冲区(Database Buffer Cache)
高数数据缓冲区中存放着Oracle系统最近访问过的数据块(数据块在高速缓冲区也可称为缓存块)。当用户向数据库发出请求时(比如检索某一条数据),如果在高速数据缓冲区存在请求的数据,则Oracle系统会直接从高速数据缓冲区中读取数据并返回给用户,否则,Oracle会打开数据文件读取请求的数据。
若无法在高速缓冲区中找到所需要的数据,则Oracle首先从数据文件中读取指定的数据块到缓冲区,然后再从缓冲区中将请求的数据返回给用户。由于高速缓冲区被所有用户共享,只要数据文件中的某些数据块被当前用户或其他用户请求过,那么这些数据块就会被装载到高速缓冲区中。这样当用户再次访问相同的数据时,Oracle就不必再从数据文件中读取数据,而是可以直接将缓冲区的数据返回给用户。
经常或最近被访问的数据块会被放置到高速缓冲区前端,不常被访问的数据块会被放置到高速缓冲区的后端,当高速数据缓冲区填满时,会自动挤掉一些不常被访问的数据块。以存取速度来看,内存的读取速度远快于物理硬盘,所以高速数据缓冲区的存在可以大大降低对物理磁盘的读取频率,从而达到提高数据服务器性能的目的。为了便于管理SGA的内存数据,Oracle把高速数据缓冲区分为以下3部分:
重做日志缓冲区(Red Log Buffer Cache)
重做日志缓冲区用于存放对数据库进行修改操作时所产生的日志信息,这些日志信息在写入到重做日志文件之前,首先存放到日志文件缓冲区中,然后,在检查点发生或重做日志文件缓冲区中的我信息量达到一定峰值时,最后由日志写入进程(LGWR)将此缓冲区的内容写入到重做日志文件。
重做日志缓冲区的大小由LOG_BUFFER参数指定,该参数也可以在实例启动之后进行动态修改。相对于高速数据缓冲区而言,重做日志缓冲区的大小对数据的性能影响较小,通常较大的重做日志缓冲区能减少重做日志文件对I/O的读写次数,对数据库的整体性能有一定提高。
共享池(Shared Pool)
共享池是SGA保留的内存区域,用于缓存SQL语句、PL/SQL语句、数据字典、资源锁、字符集以及其他控制结构等。共享池包含库高速缓冲区(Library cache)和数据字典高速缓冲区(Dictionary cache)。
大型池(Large Pool)
大型池在SQA区中不是必须的内存结构,只在某些特殊情况下,实例需要使用大型池来减轻共享池的访问压力,通常的情况有以下几种:
- 用来提供内存空间给Java虚拟机使用,目的是支持在数据库中运行Java程序包,其大小由JAVA_POOL_SIZE参数决定。
- 流池:Oracle流池用于数据库和数据库之间进行信息共享。如没有用到Oracle流,就不需要设置该池。流池的大小由参数STREAMS_POOL_SIZE决定。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。