SGA:SystemGlobal Area是OracleInstance的基本组成部分,在实例启动时分配;系统全局域SGA主要由三部分构成:数据库缓冲区、日志缓冲区、共享池,还可能包含:大池,JAVA池,流池。
注意点:前三者是必需的,后三者是可选的。
数据库缓冲区:数据库缓冲区是oracle用来执行SQL的区域,在更新数据时,用户会话不直接更新磁盘上的数据,而是先写到数据库缓冲区中的块,块在缓冲区停留一段时间,当数据从缓冲区写到数据文件后,有可能还会停留在缓冲区一段时间,只不过此时此块不会被另一个块重写。
数据库缓冲区的大小对性能有至关重要的影响,既不能过小也不能过大。一般不能少于百M,也很少有见过百G的。9i版本前需要重启数据库才能修改缓冲区大小,之后可以动态的调整数据库缓冲区。10g版本后可以根据工作负荷自动调整大小。
日志缓冲区:用于短期存储写入到磁盘上的重做日志的变更向量的临时区域,与其他内存区域相比,日志缓冲区较小,因为他是一个非常短暂的存储区域。将变更向量插入其中,并几乎实时的流向磁盘。日志缓冲区最多不必超过数MB,的确,如果将其设置大于默认值,就会对性能产生极坏的影响。大日志缓冲区就意味着:在发出commit语句时,要写入的内容更多,在发出完成提交信息以及会话恢复工作以前,需要消耗更长的时间。
注:日志缓冲区的大小是固定不变的,在启动实例时被设置为固定值,无法实现自动管理。
共享池:共享池是最复杂的SGA结构,分为许多子结构。主要包括:库缓存、数据字典缓存、PL\SQL区、SQL查询和PL\SQL函数结果缓存。共享池所有的结构都是自动管理的。
确定共享池最优容量,是一个性能调整问题,大多数数据库都需要一个数百MB大小的共享池,到大于1GB也是可能的,但很少看到有小于100MB的共享池。
大池:大池是一个可选区,如果创建了大池,那些在不创建大池的情况下,使用共享池的内存的进程将自动使用大池。大池的大小跟性能无关,大池可以动态调整,自动管理。
Java池:只有当应用程序需要在数据库中运行Java存取过程时,是才需要创建。Java池用作实例化Java对象所需的堆空间。但是很多oracle选项是用Java编写,因此现将Java池视作标准。注意Java代码不在此池缓存,而在共享池缓存。Java池最佳大小应该与应用程序相关。不能过大也不能过小。Java池的大小是动态调整,自动管理的。
PGA:ProcessGlobal Area是为每个连接到Oracledatabase的用户进程保留的内存。
oracle在运行,就是oracle的内存结构,比如放databuf,share pool,oracle启动时分配,oracle关闭时回收.
PGA是有用户连oracle时,oracle给开辟的一个内存区, 只供该用户使用,该用户断开后,oracle就会将这块内存回收
SGA由所有前台跟后台进程共享,PGA内存仅供分配到的前台进程访问,SGA和PGA都可实现自动管理。
阅读(1394) | 评论(0) | 转发(0) |