`

ORACLE SGA的结构、功能和一般设置

 
阅读更多
System global area(SGA) 是一组共享的内存结构,它里面存储了oracle数据库实例(instance)的数据和控制文件信息。如果有多个用户同时连接到数据库,他们会共享这一区域,因此SGA也称之为shared global area。

    SGA和oracle的进程组成了oracle的实例(instance)。在实例启动的时候内存会自动分配,当实例shutdown的时候操作系统会将内存回收的。每没一个实例(instance)拥有自己的SGA。

    SGA是可以读写的,每一个用户连到数据库实例时都是可以读实例的SGA的内容,oracle通过服务器进程执行一个命令去写SGA的数据。

SGA由多个部分组成:
  1,固定SGA(Fixed SGA)
  2,块缓冲区(Db cache)
  3,重做日志缓冲区(Redo log buffer)
  4,Java池(Java pool)
  5,大池(Large pool)
  6,共享池(Shared pool)
  7,流池(Stream pool)
  有如下参数控制共享池相关组件大小:
  1,JAVA_POOL_SIZE:控制Java池大小。
  2,SHARED_POOL_SIZE:9i中控制共享池中占用最大的部分,10g以上控制共享池大小。
  3,LARGE_POOL_SIZE:控制大池大小。
  4,DB_*K_CACHE_SIZE:控制不同块大小的缓冲区大小。
  5,LOG_BUFFER:控制重做日志缓冲区大小。
  6,SGA_TARGET:10g以上控制自动SGA内存管理的总内存大小。
  7,SGA_MAX_SIZE:控制SGA可以达到的最大大小,改变需重启数据库。
  下面将详细介绍各个部分的作用和推荐设置。
  二、SGA各组件作用
  1,固定SGA:
  顾名思义,是一段不变的内存区,指向SGA中其他部分,Oracle通过它找到SGA中的其他区,可以简单理解为用于管理的一段内存区。
  2,块缓冲区:
  查询时,Oracle会先把从磁盘读取的数据放入内存,以后再查询相关数据时不用再次读取磁盘。插入和更新时,Oracle会现在该区中缓存数据,之后批量写到硬盘中。通过块缓冲区,Oracle可以通过内存缓存提高磁盘的I/O性能。
  块缓冲区中有三个区域:
  默认池(Default pool):所有数据默认都在这里缓存。
  保持池(Keep pool):用来缓存需要多次重用的数据。
  回收池(Recycle pool):用来缓存很少重用的数据。
  原来只有一个默认池,所有数据都在这里缓存。这样会产生一个问题:大量很少重用的数据会把需重用的数据“挤出”缓冲区,造成磁盘I/O增加,运行速度下降。后来分出了保持池和回收池根据是否经常重用来分别缓存数据。
  这三部分内存区需要手动确定大小,并且之间没有共享。例如:保持池中已经满了,而回收池中还有大量空闲内存,这时回收池的内存不会分配给保持池。
  9i开始,还可以设置db_nk_cache。9i之前数据库只能使用相同的块大小。9i开始同一个数据库可以使用多种块大小(2KB,4KB,8KB,16KB,32KB),这些块需要在各自的db_nk_cache中缓存。如果为不同的表空间指定了不同的块大小,需要为其设置各自的缓冲区。
  3,重做日志缓冲区(Redo log buffer):
  数据写到重做日志文件之前在这里缓存,在以下情况中触发:
  每隔3秒
  缓存达到1MB或1/3满时
  用户提交时
  缓冲区的数据写入磁盘前
  4,Java池(Java pool):
  在数据库中运行Java代码时用到这部分内存。例如:编写Java存储过程在服务器内运行。需要注意的是,该内存与常见的Java编写的B/S系统并没关系。用JAVA语言代替PL/SQL语言在数据库中写存储过程才会用到这部分内存。
  5,大池(Large pool):
  下面三种情况使用到大池:
  并行执行:存放进程间的消息缓冲区
  RMAN:某些情况下用于磁盘I/O缓冲区
  共享服务器模式:共享服务器模式下UGA在大池中分配(如果设置了大池)
  6,共享池(Shared pool)
  共享池是SGA中最重要的内存段之一。共享池太大和太小都会严重影响服务器性能。
  SQL和PL/SQL的解释计划、代码,数据字典数据等等都在这里缓存。
  SQL 和PL/SQL代码在执行前会进行“硬解析”来获得执行计划及权限验证等相关辅助操作。“硬解析”很费时间。对于响应时间很短的查询,“硬解析”可以占到全部时间的2/3。对于响应时间较长的统计等操作,“硬解析”所占用的时间比例会下降很多。执行计划及所需的数据字典数据都缓存在共享池中,让后续相同的查询可以减少很多时间。
  不使用“绑定变量”导致:
  系统需要花费大量的资源去解析查询。
  共享池中的代码从不重用,系统花费很大代价管理这部分内存。
  关于共享变量的优缺点讨论已经超过了这篇文章的范畴,简单来讲,响应时间短的查询要使用共享变量,响应时间长的统计不使用共享变量。
   需要注意的是,SHARED_POOL_SIZE参数在9i中控制共享池中占用最大的部分,10g以上控制共享池总大小。
  7,流池(Stream pool)
  9iR2以上增加了“流”技术,10g以上在SGA中增加了流池。流是用来共享和复制数据的工具。
  三、SGA设置
  没有通用的设置,所有设置都要根据系统的负载、业务需求和硬件环境来进行调整。这里只是总结出大体的设定,避免因SGA设置不当引起的问题。
  1,自动SGA内存管理
   在Oracle 10g中引入了自动SGA内存管理特性,DBA可以设定SGA_TARGET告诉Oracle可用的SGA内存为多大,由Oracle根据系统负载来动态调整各组件大小,相应的数定会保存在控制文件中,使数据库重启后也记得各组件大小。
  需要注意一下几点:
  要使用自动SGA内存管理,STATISTICS_LEVEL参数必须设为TYPICAL或ALL,系统自动收集相应的信息用来动态调整SGA设定。
  可以设定某个组件的值,Oracle使用此值为该组件的最小大小
  可动态调整的参数:
  DB_CACHE_SIZE,SHARED_POOL_SIZE,LARGE_POOL_SIZE,JAVA_POOL_SIZE。
  需手动设置的参数:
  LOG_BUFFER,STREAMS_POOL,DB_NK_CACHE_SIZE,DB_KEEP_CACHE_SIZE,DB_RECYCLE_CACHE_SIZE。
  2,手动SGA内存管理
  1)32bit和64bit限制
  在32位的操作系统中,Oracle最大可用内存为1.75g,也就是说SGA+PGA<=1.75g,超过这一限制的内存将不会被Oracle用到。
  32位的Oracle可以装到64位的操作系统上,64位的Oracle不可以装到32位的操作系统上。
  2)查看Oracle版本:
  SQL> select * from v$version;
  BANNER
  ----------------------------------------------------------------
  Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
  PL/SQL Release 10.2.0.1.0 - Production
  CORE 10.2.0.1.0 Production
  TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
  NLSRTL Version 10.2.0.1.0 – Production
  3)各组件设置:
  JAVA_POOL_SIZE:如果没用到数据库端java的系统,30MB足够。
  LOG_BUFFER:默认为MAX(512KB,128KB*CPU个数)。一般系统1MB足够,运行大型事务的系统可以设为2MB,让1/3满写入日志文件时可以继续写入缓冲,再大也没有意义。
  SHARED_POOL_SIZE:过大过小都会严重影响系统性能,1GB内存可以设为100MB,2GB内存可设为150MB,4GB内存可设为300MB。共享池命中过低首先要调整的是应用程序而不是扩大共享池。使用绑定变量可以减少共享池需求、提高命中率,减少共享池管理负担和LATCH竞争。
  LARGE_POOL_SIZE:使用专用服务模式可设为30MB,除非必要,不然不建议使用共享服务器模式。
  DB_CACHE_SIZE:除去上述内存外其他可用内存都分配给该区域。
  总结
  32位Oracle:
  1G内存:SHARED_POOL_SIZE=100MB,DB_CACHE_SIZE=0.5GB;
  2G内存:SHARED_POOL_SIZE=150MB,DB_CACHE_SIZE=1.25GB;
  64位Oracle
  4G内存:SHARED_POOL_SIZE=200MB,DB_CACHE_SIZE=2.5GB;
  8G内存:SHARED_POOL_SIZE=400MB,DB_CACHE_SIZE=5GB;
  12G内存:SHARED_POOL_SIZE=500MB,DB_CACHE_SIZE=8GB

  再次强调,以上只是避免因SGA设置不当引起问题的大体设置,需要根据具体的系统负载和业务逻辑结合Stackpack等工具细调。

源自:http://hi.baidu.com/yuetengfei168/blog/item/9472832df7516a5c4ec22679.html
分享到:
评论

相关推荐

    oracle10g课堂练习II(1)

    Oracle 内存结构 1-9 Oracle 进程 1-11 概述 Oracle 实例管理 1-12 物理数据库结构 1-14 Oracle Managed Files (OMF) 1-16 逻辑和物理数据库结构 1-17 数据库体系结构:结构组件汇总 1-19 小结 1-20 2 ...

    Oracle 认证学习笔记

    3、实例(instance):sga和oracle进程的结合称为一个oracle实例。一个oracle实例(instance)只能与一个运行的oracle数据库相联系。 1.1 oracle存储器结构 oracle使用共享内存区和后台进程来管理其内存和文件...

    构建最高可用Oracle数据库系统 Oracle 11gR2 RAC管理、维护与性能优化

    2.5.6设置环境变量 2.5.7配置SSH用户等效性 2.5.8配置时间同步服务 2.5.9安装cvuqdisk包 2.5.10 CVU验证安装环境 2.6创建ASM磁盘 2.6.1安装ASMLib驱动 2.6.2创建ASMLib磁盘 2.7部署RAC 2.7.1安装Grid ...

    oracle 优化培训资料

    Oracle 服务器:Oracle 服务器中包含多种文件结构、进程结构和内存结构;但是,处理 SQL 语句时,并非所有这些结构都会用到。某些结构用于提高数据库的性能,确保该数据库在遇到软件或硬件错误时可以恢复,或者执行...

    Oracle-数据库简答题.doc

    简述Oracle数据库逻辑结构中各元素之间的关系。 答:数据库由若干个表空间组成,表空间由表、索引、视图等逻辑对象组成,表由段 组成,段由区组成,区则由数据块组成。 2.简述Oracle数据库物理结构中包含的文件类型...

    ORACLE数据库体系结构培训

    对ORACLE的体系结构做了详细的介绍,包括SGA的组成详细信息,五大主要进程的功能以及其他相关信息的介绍。 同时讲解了查询语句在数据库中的执行步骤! 如果觉得不错希望顶一下。

    深入解析Oracle.DBA入门进阶与诊断案例

    针对数据库的启动和关闭、控制文件与数据库初始化、参数及参数文件、数据字典、内存管理、Buffer Cache与Shared Pool原理、重做、回滚与撤销、等待事件、性能诊断与SQL优化等几大Oracle热点主题,本书从基础知识入手...

    Oracle10g精简绿色版

    它提供了关系数据库系统和面向对象数据库系统这二者的功能。Oracle是目前最流行的客户/服务器(CLIENT/SERVER)体系结构的数据库之一。在数据库的SQL PLUS工具中用户可以输入不同的SQL语句,该工具可以把数据返回给...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    作者通过总结各自多年的软件开发和教学培训经验,与大家分享了掌握Oracle SQL所独有的丰富功能的技巧所在,内容涵盖SQL执行、联结、集合、分析函数、子句、事务处理等多个方面。读者可以学习到以下几个方面的技巧:...

    OCPOCA认证考试指南全册:Oracle Database 11g(1Z0-051,1Z0-052,1Z0-053)--详细书签版(第2/2部分)

     ●oracle网络和存储结构  ●安全性  ●sql  ●oracle恢复管理器和oracle闪回技术  ●资源管理器  ●oracle自动存储管理  ●oracle调度程序  ●自动工作负荷知识库  ●性能调整 作译者  John Watson就职...

    oracle数据库dba管理手册

    6.1.6 SGA区域大小设置得不正确 133 6.2 目标选择 133 6.3 最终产品 134 6.4 建立Command Center数据库 136 6.4.1 数据获取 139 6.4.2 生成报警报表 143 6.4.3 空间汇总报表 147 6.4.4 数据过滤 149 6.5 监控内存...

    oracle10g课堂练习I(2)

    SGA 和 PGA 11-28 共享服务器:连接共享 11-29 不能使用共享服务器的情况 11-30 小结 11-31 练习概览:使用 Oracle Network 组件 11-32 12 主动维护 课程目标 12-2 主动维护 12-3 术语简介 12-4 优化程序...

    Oracle9i的init.ora参数中文说明

    说明 : 为设置使用共享服务器的共享环境而设置调度程序的数量和类型。可以为该参数指定几个选项。有关详细信息, 请参阅“Oracle8i 管理员指南”和“Oracle Net Administrator's Guide”。这是字符串值的一个示例: ...

    oracle数据库经典题目

    SGA区是由Oracle分配的共享内存结构,包含一个数据库实例共享的数据和控制信息。当多个用户同时连接同一个实例时,SGA区数据供多个用户共享,所以SGA区又称为共享全局区。用户对数据库的各种操作主要在SGA区中进行。...

    DBAtools for PL/SQL表空间管理器

    PL/SQL Developer是Oracle数据库当前最流行的开发工具之一,它在ORACLE数据库开发设计方面功能强大,使用方便,但是数据库管理方面一直比较欠缺。 DBATools For PL/SQL Developer 是一款PL/SQL Developer的辅助插件...

    Oracle 性能调整(真正由ORACLE甲骨文出品)

    Oracle 8i Release 2 (8.1.6)可以做直接常量和捆绑变量的 自动转换,Oracle9i又进一步扩充了该功能… &lt;br&gt; CURSOR_SHARING=FORCE (Default is EXACT; 8iR2) &lt;br&gt; 如果通过监测v$sqlarea发现...

Global site tag (gtag.js) - Google Analytics