体系结构2

1、数据文件,由三类文件组成:⊙ 第一类是文本离线文件,如参数文件、口令文件(spfile是服务端的)。⊙ 第二类也是离线文件, 如归档文件。⊙ 第三类是我们最关心的文件,DB在线文件,它按功能分如下几种:控制文件,数据文件,连接日志文件。他们的文件头都有一些描述信息、状态信息、一致性信息和控制信息。
2、内存由SGA和PGA组成,分别代表系统全局区和进程全局区。S可以理解成SYSTEM,也可以理解成SHARE。P可以理解成PROCESS,PRIVATE。所以S是共享的,P是私有的。每个实例只有一个SGA,生命周期是实例,实例停止,SGA消亡。而整个实例有很多PGA,对应的是进程,一个进程一个PGA,生命周期是进程。⊙ SGA:系统全局区,用于存储数据库信息的内存区,该信息为数据库所有进程所共享。⊙ PGA:程序全局区,包含单个服务器进程或单个后台进程的数据和控制信息
3、PGA: 程序全局区,服务器进程使用的内存区域,包括特定服务器进程的数据和控制信息,例如私有信息和使用的操作系统资源等。  UGA: 用户全局区,特定Session使用的内存区域,例如Session的SQL工作区、登陆认证信息等。Session的SQL工作区大小对查询性能的影响比较关键,shared server模式时UGA从SGA的large pool(如果有设置)或者shared pool(没有设置large pool)中分配,dedicated server模式时UGA从PGA中分配。 CGA: 调用全局区,存放调用过程中需要的数据,例如parse调用、executive调用、fetch调用等。调用过程中实际需要的数据,例如SQL Area、Sort Area等位于UGA中,CGA存放的只是调用过程中的临时处理数据,例如I/O缓存、临时堆栈空间等。CGA位于PGA中(PGA是集中管理这些资源的地方),在调用开始时创建,调用执行过程中动态分配,调用结束后释放。
4、UGA里面的cursor信息。在会话期间,有些信息是可以共享的,这在ORACLE中通过SQL语句实现,并将执行计划记录下来,我们称共享SQL 区。但是对于用户每发送一个语句,在专有模式,相对于服务器进程是私有的,所以我们称私有SQL区,输入进程内存。用户每发一个语句,包括有绑定信息,运行时信息等,这些都是在私有SQL区中。私有SQL区或者称CURSOR,一个SQL就会对应一个CURSOR,在CURSOR关闭时释放。CURSOR分隐式CURSOR和显式CURSOR两种,隐式CURSOR,不需要人为控制CURSOR,比如常规的DML语句。ORACLE自动创建CURSOR和释放CURSOR。还有像PLSQL中定义的CURSOR,就是显式CURSOR。CURSOR是在UGA中的,1个CURSOR可以指向多个SQL语句,多个共享SQL区。CURSOR只是一个句柄,包括绑定变量和一个指针。OPEN_CURSORS是限制某个会话打开的CURSOR数。CURSOR(私有SQL 区)这里有两个部分:⊙ 句柄,指向搜索1000本书方法(执行计划)的共享SQL区。称固有部分。⊙ 运行时部分,保留运行时状态。注意,每个会话会限制CURSOR数,如果每次执行完一个CURSOR(任务)后不马上释放这些CUROSR(任务)信息,那么超过open_cursors数后回抛出open cursor数超出错误,否则会占过多的资源。这些CURSOR信息在共享服务模式是共享的,属于 UGA,并存放在SGA中,在有大池的情况下存放在大池。还有一部分内存是完全私有的,比如有些局部变量作为程序的栈空间,还有些私有工作空间,如排序区,HASH JOIN区,位图合并区等,它们是在执行的时候调用全局区的,我们称为CGA,执行完就释放。为了减少资源使用,CGA执行完就释放,是运行时状态,别的进程是无法看到的,还有象栈空间调用完就释放的都是私有信息。但是执行结束后如果需要反馈给用户会话的数据,如SELECT的FETCH,则需要保留区的数据提供用户反馈信息,这些信息不是保持在CGA。如我们排序区可以设置保留空间,这样这些SQL执行完排序完后,不马上释放给操作系统,而是释放给UGA,最后FETCH反馈给SELECT的用户。而共享服务模式UGA是共享内存,所以保留区排序在没有FETCH前可以使用,但是FETCH后仍然不会保留这段内存,它还是会被释放的。fetch,取出。
5、SGA构成:必备的四个组件:⊙ 第一个组件:共享池,用来存放SQL解析树和字典对象定义的共享区域。⊙ 第二个组件,数据库高速缓存区,用来存放业务数据的共享内存区域。⊙ 第三个组件,REDO日志缓存区,用来记录数据库的每个改动向量,其中包括系统的改动和UNDO的改动(UNDO其实也是一次REDO)⊙ 第四个组件,其它共享资源,如LOCK,ENQUEUE,LATCH,统计数据。除了前3个组件是资源外,锁也是资源,前3个组件的共享资源并发冲突可以用LATCH来管理,那LATCH本身也是种资源,还需要专门管理LATCH的LATCH来管理。latch阀。可选的组件:大池是用于存放对那些复杂的程序包分析、RMAN、UGA、异步IO等相关的数据,而JAVA池是用来存放JAVA存储过程的分析信息。
6、SGA设置:⊙ ORACLE需要你先划分一个SGA的最大大小限额SGA_MAX_SIZE,用于划出最大多少的内存给ORACLE共享内存使用。该参数只能通过文本参数修改或SPFILE的设置,并在重起后生效。实现SGA的自动管理,需设置sga_target。sga_target也可以设置成0,可以实现传统的SGA配置。SGA_TARGET我们称自动内存管理为ASMM,在11G,可以把PGA和SGA作为一个整体进行自动管理(AMM)。⊙ SGA也会使用到虚拟内存,在有些平台甚至可以固定在物理内存内。我们知道一个进程使用的物理内存,会需要相应大小的虚拟内存,所以要设置合理的虚拟内存大小,以支持系统正常运转。通常情况:如果4G的物理内存,配置4G或者8G虚拟内存就可以。show parameter sga_max_size/sga_target ;
7、⊙ 内存分配需要按照颗粒大小来分配。比如颗粒是16M,原来总内存是32M,你把32M改为40M,那实际上会变成32M+16M=48M。在设置SGA各部分的内存时,Oracle是以一种叫做粒度(Granule)的单位来分配的,一般来说SGA小于1GB,一个粒度为4MB,SGA大于1GB时,一个粒度为16MB。在给各部分分配内存时,必须是粒度的整数倍,例如:假设粒度为4MB,如果你在设置参数设置为2MB,那么Oracle也会自动把实际分配的值调整为4MB。
可以在视图V$SGA_DYNAMIC_COMPONENTS中,通过GRANULE_SIZE字段查看。
8、PGA与UGA:PGA包括了堆栈空间和UGA。在专有模式,UGA在PGA里,如果是共享模式,UGA就在SGA里。UGA包括用户会话数据,还有cursor,比如指针,绑定变量。另外UGA里还有排序保留区,用户显示排序数据。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值