`

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
分享到:
评论

相关推荐

    oracle sga设置

    ### Oracle SGA 设置详解 #### 一、Oracle SGA 概述 在Oracle数据库系统中,SGA(System Global Area)是所有用户进程共享的一块内存区域,它为Oracle实例提供了一个公共的数据和控制信息存储区。SGA的合理配置...

    oracle-sga结构

    Oracle SGA(System Global Area)是Oracle数据库管理系统中的核心组成部分,它是一个共享内存区域,用于存储数据库运行时所需的各种数据和信息。理解SGA的结构对于优化数据库性能和日常维护至关重要。 SGA主要包含...

    Oracle_SGA

    SGA是Oracle实例的一个重要组成部分,它是一个位于内存中的共享数据结构集合,用于存储所有用户进程共享的信息。SGA的大小是动态可变的,可以根据不同的配置参数进行调整。了解SGA的各个组件以及它们如何协同工作...

    oracle 体系结构详解

    Oracle体系结构的知识点非常广泛,包括了对数据库实例和数据库文件的理解,SGA区和PGA区的内存管理,后台进程的功能和操作,以及各类参数设置对数据库性能的影响。掌握这些知识点对于管理和维护Oracle数据库至关重要...

    Oracle体系结构详解

    ### Oracle体系结构详解 Oracle体系结构是理解Oracle数据库工作原理的关键。...通过以上介绍可以看出,Oracle的体系结构非常复杂且功能强大,深入了解这些核心概念对于管理和优化Oracle数据库至关重要。

    Oracle12c 结构体系

    首先,了解Oracle 12c的体系结构,需要从系统全局区(System Global Area,SGA)开始。SGA是数据库实例运行时分配和保留的内存区域,包括多个子组件: 1. 共享池(Shared Pool):用于存储数据字典信息、共享SQL...

    Oracle11g体系结构图

    2. **内存结构**:Oracle11g的内存结构主要由两部分组成——系统全局区(SGA)和程序全局区(PGA)。SGA是被多个用户进程共享的内存区域,包含数据缓冲区缓存、共享池、大池、Java池和流池等;PGA是为每个会话分配的...

    oracle体系结构8.09

    Oracle数据库的体系结构主要包括几个关键部分:数据库实例(Instance)和数据库文件(Database Files)。其中,数据库实例由内存结构(Memory Structures)和后台进程(Background Processes)组成;而数据库文件则...

    Oracle数据库体系结构( 中文详细版)

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统之一,其强大的功能和稳定性使其在企业级应用中占据了重要地位。本文将详细解析Oracle数据库的体系结构,帮助读者深入理解其内部工作原理。 Oracle数据库的...

    OracleDB体系结构

    综上所述,Oracle数据库体系结构涉及多个层次的管理和优化策略,从内存结构到进程管理,再到实例管理,每一层都有其独特的功能和技术特点。了解这些基础知识对于有效地利用Oracle数据库至关重要。

    强烈推荐 Oracle 体系结构(高清完整中文版)

    Oracle 的内存结构主要由 PGA (Program Global Area) 和 SGA (System Global Area) 组成。 ##### PGA - 私有内存 - **定义**:PGA 是专用于每一个服务器进程或后台进程的私有内存区域。 - **内容**: - **堆栈**...

    oracle绝密培训.oracle体系结构

    基本安装适用于简单快速地配置数据库,而高级安装则提供了更多的自定义选项,如选择特定组件和设置数据库参数。Oracle 10g对内存的需求至少为256MB,但推荐配置为512MB或更高,以确保系统性能。 Oracle 10g的体系...

    oracle学习(内存参数设置)

    Oracle数据库的内存结构主要由SGA(System Global Area)和PGA(Private Global Area)组成。SGA是用于存储数据库信息的内存区,该信息为数据库进程所共享。它包含Oracle服务器的数据和控制信息,在Oracle服务器所...

    Oracle体系结构材料

    在Oracle体系结构中,还有其他重要的概念,如表、视图、索引、触发器、存储过程等,它们共同构成了Oracle数据库丰富的功能和灵活性。了解和掌握这些基本组件及其相互作用,对于优化数据库性能、保障数据安全以及解决...

    Oracle体系结构介绍

    Oracle数据库的内存结构主要分为两个部分:系统全局区(System Global Area, SGA)和程序全局区(Program Global Area, PGA)。 - **Java Pool**:用于存储Java应用程序的数据和代码。 - **Database Buffer Cache**...

    Oracle 体系结构组件

    本文将深入探讨Oracle体系结构的主要组件及其功能。 首先,Oracle服务器是整个Oracle数据库管理系统的核心,它不仅包括Oracle例程,还有Oracle数据库本身。Oracle例程是一种访问数据库的方式,始终保持打开状态,由...

    oracle11g系统结构说明

    Oracle 11g的内存结构主要分为两大部分:系统全局区(SGA)和个人全局区(PGA)。 1. **系统全局区(SGA)**: - SGA是被多个用户进程共享的一块内存区域,主要包括以下几个部分: - **Java池**:用于存储Java...

    Oracle的数据存储结构

    此外,Oracle的存储管理还包括自动存储管理(ASM),它整合了磁盘管理和数据库存储,简化了存储管理,并提供了自动化的空间分配和扩展功能。 总之,Oracle的数据存储结构是一个复杂而精细的体系,它结合了逻辑和...

    Oracle体系结构概述.ppt

    Oracle体系结构是理解其高效运行和管理的关键。本篇将深入探讨Oracle的体系结构及其主要组成部分。 首先,Oracle数据库的核心是数据库本身,它是一个数据的集合,包含在一个或多个物理文件中。数据库分为物理结构和...

    Oracle Database 12cR2 Architecture体系结构图 高清版

    9. **进程结构**:12cR2 中,有代表 Oracle 传统进程的组件,也有针对新功能如 ASM 和 RAC 的新进程。例如,Global Resource Directory(RAC Only)用于管理全局资源,而 Redo Shipping 和 Lnnn 进程涉及数据的复制...

Global site tag (gtag.js) - Google Analytics