oracle中的sga包含了几个主要的部分
1.shared pool 共享池
2.database buffer cache 数据库高速缓冲区
3.redo log buffers 重做日志缓冲区
4.large pool 大池
5.java pool java池

a.shared pool:
oracle shared pool包括library cache(库缓存)和dictionary cache(数据字典高速缓存)

library cache中包含了共享sql区和共享pl/sql区两部分,他们分别存放sql和pl/sql语句以及相关的信息。oracle通过一个称为LRU(least recently used)队列的算法来实现对library cache管理的。其算法大致如下:刚刚使用过的内存块(的地址)放在LRU队列的头上,当一个服务器进程需要library cache的内存空间时该进程就从LRU对列的尾部获取所需的内存块,这些内存块一旦被使用他们(的地址)就立即放在LRU对列的最前面,这样那些长时间没有使用过的内存块将自然地移动到LRU对列的尾部而最先被使用。为了能够共享sql和pl/sql的代码,library cache要足够大。不过oracle并没有修改library cache大小的参数。只能间接地通过修改shared pool来修改library cache的大小。长时间的使用shared pool会产生许多碎片如果在shared pool中没有足够的连续空间来装载目标数据就会产生错误,所以oracle提供了flush_shared_pool参数来刷新shared pool
语句:
alter system set shared_pool_size=48M;
alter system flush_shared_pool;

dictionary cache:数据库对象的信息存储在数据字典表中,当数据库需要这些信息的时候,将读取字典表并将返回的数据存储在dictionary cache中。dictionary cache也是通过LRU算法来使用数据块。dictionary cache是shared pool的一部分,不能单独设置其大小,只能同过修改shared_pool_size参数在修改。当查询数据字典的速度缓慢时,应该加大shared_pool_size。

b.database buffer cache:
oracle修改数据时,服务器进程将首先在database buffer cache中搜索所需要的数据,如果找到了就直接使用而不进行磁盘搜索,如果没有找到就进行磁盘操作,把数据文件中的数据读入到database buffer cache中。修改后,当达到一定条件时,会由DBWn进程负责把database buffer cache中的数据写入到数据文件中。oracle也是使用LRU算法来实现对database buffer cache的管理的。可以使用db_block_size和db_block_buffers来设置database buffer cache的大小,其中db_block_size是在创建数据库时固定了的,创建完数据库后不可修改。而db_block_buffers的算法是48M/db_block_size。如果SGA的大小不足以容纳所使用的数据,那么其他缓冲区将争用database buffer cache的空间,使数据库性能下降。多个程序共享一个SGA时易出现这种现象。 当什么时候DBWn进程才将database buffer cache中的数据写入到数据文件中呢 :
1.Checkpoint的时候
2.当buffer cache中没有足够的free buffer的时候。

c.redo log buffers:
当数据库中的数据被修改时,后台进程LGWR将修改的内容,记录到redo log中,以便在数据库恢复过程中实现回滚。然而在被写入到redo log之前,事物首先被记录在redo log buffers中。当达到一定条件后将激活LGWR进程来写入redo log文件中。而这几个条件分别是:
1.发生提交。
2.到达LGWR非活动时限。
3.redo log buffers中的数据达到redo log buffers 1/3时。
4.DBWn在检查点完成database buffer cache的刷新。

d.large pool:
Large Pool是一种类似共享池的SGA缓冲池,和共享池不同的是,只有少量类型的对象可以在Large Pool中创建。Large Pool的空间不在共享池中分配,是在数据库启动的时候另外分配的。Large Pool的大小由LARGE_POOL_SIZE确定。Oracle数据库也可以不配置Large Pool。从Oracle 8开始,Oracle数据库引入了Large Pool,在Oracle 8中,Large Pool的主要功能由两个:
1.为MTS(共享服务器的早期版本)模式的会话分配UGA空间.
2.作为连续文件IO的缓冲,比如系统管理的恢复和rman备份恢复(当RMAN使用了多个IO SLAVES的时候)
在一般情况下LARGE POOL使用需求不大,因此不必要设置过大的LARGE POOL.

e.java pool:
引入java pool的目的是能够编译java语言的命令,如果要使用java语言,就必须要设置java pool。java语言早oracle数据库中的存储于pl/sql语言几乎完全相同。可以通过参数java_pool_size的值来设置java pool的大小,其单位是字节(bytes)。在oracle9i中java pool的默认大小是24M。

PGA

(Program Global Area程序全局区)是一块包含一个服务进程的数据和控制信息的内存区域。它是Oracle在一个服务进程启动是创建的,是非共享的。一个Oracle进程拥有一个PGA内存区。一个PGA也只能被拥有它的那个服务进程所访问,只有这个进程中的Oracle代码才能读写它。因此,PGA中的结构是不需要Latch保护的。
我们可以设置所有服务进程的PGA内存总数受到实例分配的总体PGA(Aggregated PGA)限制。
在专有服务器(Dedicated Server)模式下,Oracle会为每个会话启动一个Oracle进程;
而在多线程服务(Multi-Thread Server MTS)模式下,由多个会话共享同一个Oracle服务进程。
PGA中包含了关于进程使用到的操作系统资源的信息,以及一些关于进程状态的信息。
而关于进程使用的Oracle共享资源的信息则是在SGA中。
这样做可以使在进程以外中止时,能够及时释放和清除这些资源。

相关视图
V$PGASTAT
V$PGASTAT提供了PGA内存使用情况的统计信息和当自动PGA内存管理启动时的统计信息。
视图里面的累加数据是自从实例启动后开始累加的。

V$SYSSTAT,V$SESSTAT
这两个视图显示了系统(会话)的统计数据。他们的统计项目基本相同,
但不同之处在于一个是系统级的、一个是会话级的。

V$PROCESS
这个视图显示了所有Oracle进程的信息。其中以下几个字段则说明了进程PGA内存的使用情况。
PGA_USED_MEM:进程使用的PGA内存
PGA_ALLOCATED_MEM:分配给进程的PGA内存
PGA_MAX_MEM:进程使用的最大的PGA内存

转载于:https://www.cnblogs.com/alex-blog/articles/2470768.html

oracle中的sga和pga相关推荐

  1. oracle中修改sga和pga

    1.修改sga大小: SQL> alter system set sga_max_size=2560M scope=spfile; System altered. SQL> alter s ...

  2. oracle查询pga大小GB,Oracle如何调整SGA和PGA的大小

    Oracle 10G开始支持使用SGA_TARGET参数进行SGA自动,Oracle可自动调节共享池和数据缓冲池的大小,以下是OS:RH AS4 U7 64bit环境 Oracle 10.2.0.1版 ...

  3. ORACLE中的delete语句

    ORACLE中的delete语句 一.语法 DELETE FROM 表名称 WHERE 列名称 = 值 二.删除某行 "Fred Wilson" 会被删除: DELETE FROM ...

  4. 个人笔记:ORACLE大页内存hugepage和SGA、PGA的经验,SGA并不是越大越好

    背景:ORACLE 11.2,SGA 64G,PGA 8G,压测出现操作系统内存耗尽 WARNING: Heavy swapping observed on system in last 5 mins ...

  5. oracle sga pga mysql_oracle实例内存(SGA和PGA)调整-xin

    一.名词解释 (1)SGA:System Global Area是Oracle Instance的基本组成部分,在实例启动时分配;系统全局域SGA主要由三部分构成:共享池.数据缓冲区.日志缓冲区. ( ...

  6. oracle实例的内存(SGA和PGA)调整,优化数据库性能

    一.名词解释 (1)SGA:SystemGlobal Area是OracleInstance的基本组成部分,在实例启动时分配;系统全局域SGA主要由三部分构成:共享池.数据缓冲区.日志缓冲区. (2) ...

  7. Oracle 内存(SGA,PGA)详细介绍

    一.名词解释 (1)SGA:SystemGlobal Area是OracleInstance的基本组成部分,在实例启动时分配;系统全局域SGA主要由三部分构成:共享池.数据缓冲区.日志缓冲区. (2) ...

  8. oracle实例的内存(SGA和PGA)的调整和优化(转载)

    一.名词解释 (1)SGA:SystemGlobal Area是OracleInstance的基本组成部分,在实例启动时分配;系统全局域SGA主要由三部分构成:共享池.数据缓冲区.日志缓冲区. (2) ...

  9. oracle实例内存(SGA和PGA)调整

    一.名词解释  (1)SGA:System Global Area是Oracle Instance的基本组成部分,在实例启动时分配;系统全局域SGA主要由三部分构成:共享池.数据缓冲区.日志缓冲区. ...

最新文章

  1. java jni key_JNIKeyProtection
  2. 分享Kali Linux 2016.2第43周镜像
  3. win10 java64虚拟机_Java VM 环境配置过程要点( win10,64位)
  4. unity, 内存profile,ImageEffects Temp和Unity GI SystemTex RGBM
  5. 每天拿起手机100次,使用7小时?iOS 12告诉你时间都去哪儿了
  6. SpringBoot配置文件最全最详细中文说明
  7. python借助missingno可视化分析缺失值
  8. NET环境下有关打印页面设置、打印机设置、打印预览对话框的实现-
  9. 网站压力测试工具 webbench
  10. win11设置打开闪退怎么办,解决win11系统闪退的问题
  11. 给你一个全自动的屏幕适配方案(基于SW方案)二 —— Calces.Screen插件拓展功能升级...
  12. 阿里云服务器如何修改密码
  13. .NET多线程编程(2)——Thread类
  14. 统计某个路径下的总文件个数,及总行数(不含空行)
  15. 服务器安全防护措施有哪些?
  16. 两个一维数组合成二维数组
  17. python播放url音频_从URL获取音频并播放i
  18. 计算机表格行列知识,计算机基础知识——应用表格.ppt
  19. 小论工具类App的盈利之道
  20. QQ 引流引发的灰色地带产业

热门文章

  1. es7 async 前置依赖
  2. thrift服务windows环境编译失败
  3. 生成随机长度字符串,比如密码等
  4. Firemonkey Android IOS 图标
  5. 无废话XML--XML约束(DTD)
  6. 基于SOUI开发的应用展示
  7. scala编程第16章学习笔记(1)
  8. hdu 4409 Family Name List LCA +stl
  9. 数字后端——电源规划
  10. (视觉和激光传感器)SLAM 做室内GPS与室外真实GPS在无人机上的对比