SGA 和PGA
一、SGA
SGA是由Oracle分个配的共享内存结构,包含一个数据库实例的数据和控制信息,SGA数据供所有的服务器进程和后台进程共享。所以又称为共享全局区。该内存区随着数据库实例的创建而分配,随实例的终止而释放。
SGA 主要由数据高速缓冲区、共享池、重做日志缓冲区、大池、JAVA池、流池、和其他结构构成
1、数据库高速缓冲区
A 功能:
数据高速缓冲区存储是最近从数据文件中检索出来的数据,供所有用户共享,当用户要操作数据库中的数据时,先由服务器进程将数据从磁盘的数据文件读取到数据高速缓冲区中,然就在缓冲区中进行处理,用户处理后的结果被存储到高速缓冲区中,最后由数据库写入进程 DBWN写到磁盘的数据文件永久保存。
B 缓存块的类型:
脏缓存块(Dirty buffers)咱数据块中保存的是已经被修改过的块。
空闲数据块(free buffer)空闲数据块不包含任何数据,它们等待后台进程或服务器进程项其中写入数据。
命中缓存块(pinned buffer)是指那些正在被使用的数据块,同时还有很多会坏等在修改。
干净数据块(clean buffer)是指那些当前没有被使用分数据块,即将被换出内存的缓存块,
C 数据高速缓冲区的类型:
Keep 缓冲池:在内存中保留的数据块,这些数据块不会被换出内存。
Recycle 缓冲池:循环使用的缓冲池
Default 缓冲池:包含已经被分配的数据块。
D 缓存快的管理:
脏缓存快列表: 该列表中包含那些已经被修改但还没有写入数据文件的咱缓存快
LRU:该列表中包含所有的脏缓存快,命中缓存块。干净缓存块和那些还没有移动到脏缓存块列表的脏缓存块。在该列表中,最近被访问的缓存数据块被移动到列表的头部。而其他缓存块向列表尾部移动,最近最少的访问的缓存块最先被移除LRU列表,遵循 先进先出的原则。
E 缓存命中:当用户进程查找的要访问的数据在高速缓冲区中可以找到这样就称之为缓存命中。
F 缓存失败:相反就是没有在数据高速缓存区找到用户进程想要访问的数据 。
G 数据高速缓冲区的大小
标准缓冲区的大小由参数 DB_CACHE_SIZE设定。非标准区由参数DB_nK_CACHE_SIZE设置。
高速缓冲区当然不是越大越好,它们都是有个限制的
可以通过视图 v$SGA_DYNAMEIC_COMPONENTS查看构成。
可以使用alter system语句调整数据高速缓存区
Alter system set db_cache_size=200,m
2.重做日志缓冲区
首先重做日志缓冲区是对数据库进行修改操作时生成的重做记录。
重做日志缓冲区是一个循环缓冲区,在使用时从顶端向底部写入数据,然后在返回到缓冲区的起始点。
重做日志缓冲区的大小随数据库性能有较大的影响,较大的重做日志缓冲区可以减少对重做日志文件的写入次数,
3.共享池
A 库缓存 (library cache)
库缓存就是缓存最近被解释并执行过的SQL、PL/SQL语句 、以及执行计划。以提高SQL的执行效率。
库缓存区主要包括 SQL工作区的PL/SQL工作区的两个部分;
B数据字典缓存区
数据字典主要的保存的就是最常用的数据字典信息,如数据库对象信息,账户信息,数据库结构信息等, 当访问的数据库时。可以从数据库字典缓存中获得对象是否存在,用户是否有操作权限
共享池的大小 可以通过alter system set shared_pool_size=50m.
4大型池
主要为Oracle共享服务器、服务器I/O进程数据库备份于回复操作。执行有大量排序的SQL语句。如果没有配置配置大型池,上述操作将在共享池或PGA中分配,影响共享池和PGA的使用效率。
Alter system set large_pool_size=10m.
5JAVA 池stream池 就不在说了 。
二 PGA
1.PGA:在创建一个服务器进程的同事要为该服务器进程分配一个内存区。该内存被称为程序全局区PGA。PGA是个私有的内存区不能共享。每个服务器进程稚嫩而过访问自己的PGA
2.PGA由下列4部分组成
排序区:存放排序操作所产生的临时数据
游标信息区:存放执行游标操作时所产生的数据。
会话信息区:保存用户会话所具有的权限,角色,性能统计信息。
堆栈区:用于保护会话过程中的绑定变量,会话变量等信息。
在不同的服务器连接模式中。PGA的分布略有不同。在共享服务器模式下面会话信息存在SGA中。如果有大池的话。就存放在大池。否则就存放在共享池中。