更新时间:2021-03-11 17:53:36 来源:极悦 浏览1182次
SGA系统全局区的英文简称,SGA(System Global Area)是Oracle Instance的基本组成部分,在实例启动时分配。Oracle数据库中的SGA是一组包含一个Oracle实例的数据和控制信息的共享内存结构。主要是用于存储数据库信息的内存区,该信息为数据库进程所共享(PGA不能共享的)。Oracle SGA组件包含Oracle服务器的数据和控制信息,它是在Oracle服务器所驻留的计算机的实际内存中得以分配,如果实际内存不够再往虚拟内存中写。
SGA主要由数据高速缓冲区(Database Buffer Cache)、共享池(Shared Pool)、重做日志缓冲区(Redo Log Buffer)、大型池(Large Pool)、Java池(Java Pool)、流池(Streams Pool)和其他结构(如固定SGA、锁管理等)组成,下面我们大致一一介绍一下。
1、数据库高速缓冲(the data buffer cache)
在数据高速缓冲区中存放着Oracle系统使用过的数据块(即用户的高速缓冲区),当把数据写入数据库时,它以数据块为单位进行读写,当数据高速缓冲区填满时,则系统自动去掉一些不常被用户访问的数据。如果用户要查的数据不在数据高速缓冲区时,Oracle自动从磁盘中去读取。数据高速缓冲区包括三个类型的区:
1) 脏数据区(Dirty Buffers):包含有已经改变过并需要写回数据文件的数据块。
2) 自由区(Free Buffers):没有包含任何数据并可以再写入的区,Oracle可以从数据文件读数据块该区。
3) 保留区(Pinned Buffers):此区包含有正在处理的或者明确保留用作将来用的区。
2、共享池
1)库高速缓存:用来接收pga传递过来的hashvalue,如果该值存在,做软分析,否则,做硬分析,定义语句是全标扫描还是索引扫描。
2)数据字典高速缓存:提供访问的对象是表还是索引还是同义词,表空间、数据文件等,进行递归调用。
3)服务器进程用来读取数据文件到数据高速缓存区中,然后进行的读取。
3、重做日志缓冲区(Redo Log Buffer)
与块的更改有关,其大小需要手工设置。
4、大型池(Large Pool)
大池是一个可选区域。如果创建了大池,那各种进程都会自动使用大池。否则就只能使用共享池中的内存。之所以称之为大池,是因为它用于大块内存的分配,共享池不会处理这么大的内存块。
大池专门用于以下情况:
1)共享服务器连接,用于在SGA中分配UGA区,因为一个用户断开之后,UGA就可以立即释放;
2)语句的并行执行,允许分配进程间的消息缓冲区,这些缓冲区用于协调并行查询服务器。一旦发送了缓冲消息就可以立即释放;
3)备份,在某些情况下用于RMAN磁盘I/O 缓冲区。因为写入磁盘之后,这些缓存可以立即释放;
5、Java池(Java Pool)
是为满足在ORACLE中内嵌JAVA存储过程或其他JAVA程序(例如CORBA中间件)运行时而需要的内存,如果不用JAVA等程序,就无须设置,使其值为0就可以了。
6、流池(Streams Pool)
9iR2以上增加了“流”技术,10g以上在SGA中增加了流池。流是用来共享和复制数据的工具。
7、固定SGA(Fixed SGA)
可以把这个区想成是 SGA中的“自启”区,Oracle在内部要使用这个区来找到SGA的其他区。换一句话,就是在这个内存里面存有其他区的地址,我们可以通过访问这个区来查找到其他区的位置。
总的来说,可以把Oracle SGA组件看成是由这7个部分组成,它们之前相辅相成,互相协作,共同组成了Oracle中的Oracle实例的数据和控制信息的共享内存结构。在本站的Oracle教程中,我们会深入介绍这些组件的各个作用和属性,想学习的小伙伴千万不要错过这精彩的课程。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习