详谈SGA

来源:互联网 发布:二次元图片下载软件 编辑:程序博客网 时间:2024/05/21 16:23

       影响SGA内存分配数量的参数,除了SGA_MAX_SIZE,其他都是动态参数,也就是说在数据库运行期间可以使用ALTER SYSTEM语句动态的修改参数,SGA的大小是动态的,通过修改这些参数可以是SGA增长或收缩

SGA组件和SGA内存颗粒

      有许多组件组成,他们是用于满足特定内存分配请求的内存池,例如共享池(用于缓冲磁盘数据块),所有的SGA以一个最小的内存单元颗粒分配和回收内存空间,ORACLE在系统内部追踪SGA的内存单元的分配和使用。
      SGA的内存分配是通过颗粒进行分配的,颗粒大小由SGA的大小决定,一般来说,在大多数平台,如果SGA大小等于1G,那么颗粒大小为4MB,如果大于1G,颗粒的大小为16MB,不同的是在32位WINDOWS平台下,SGA大于1G时,颗粒大小为8MB,并非16MB。详细信息,查看操作系统文档。

查看实例颗粒

      可以通过V$SGAINFO系统视图查看由某个实例使用的颗粒大小的整数倍,那么ORACLE将会在四舍五入求整而得到其整数倍值,赋给SGA组件,而不是你所指定的大小,例如如果颗粒大小为4MN,你给DB_CACHE_SIZE参数设定为10MB,那么实际分配将会是12MB。
限制SGA的大小

      SGA_MAX_SIZE参数指定SGA在实例的生命期内的最大数,动态修改这些参数影响的Buffer cache,shared pool,large pool,java pool,和streams pool的大小,和SGA的总大小。但是不能超过SGA_MAX_SIZE参数所设定的值。
       如果没有指定,那么默认把所有初始化参数中指定的内存组件的和作为其缺省值。

使用自动共享内存管理

       通过SGA_TARGET参数来启动共享内存管理以前手动分配的类似java_pool,large_pool这样的共享内存组件将被自动管理,另外,你必须确保STATISTICS_LEVEL初始化参数设置为TYPICAL(默认值)或ALL。
        SGA_TARGET初始化参数反映了SGA的大小。

SGA参数的动态修改

      你可以在ALTER SYSTEM SQL 语句动态修改SGA_TAQGET参数和控制SGA内存组件的其他参数的的值,在下列段落中有描述.

      SGA_TARGET参数值是可以增加到SGA_MAX_SIZE参数所指定的值,也可以减少,如果减少SGA_TARGET的值,系统将调整共享内存的大小,并且释放内存,你可以减少SGA_TARGET的大小直到达到SGA内存组件的最小值为止。(Oracle数据库确定所允许的最低值为SGA_TARGET考虑到几个因素,其中包括价值定为自动中小企业组成部分,中小企业组成部分手动使用SGA_TARGET空间, CPU的数量。)
      当SGA_TARGET被修改时,消耗的物理内存取决于操作系统,在有些UNIX平台上不支持动态共享内存,由SGA使用的物理内存的大小等于SGA_MAX_SIZE参数设置的值,在这样的平台上设置SGA_TARGET参数小于SGA_MAX_SIZE参数的值没有实际意义,在这些平台上不推荐设置SGA_MAX_SIZE参数。
      在其他平台上,比如Solaris和Windows消耗的物理内存等于SGA_TARGET参数设置的值,
      当SGA_TARGET参数调整大小时,受影响的仅仅是那些被自动管理的SGA内存组件,并且在初始化参数中没有为其设置最小值,手动管理的SGA。

对自动管理组件修改参数

     如果没有设置SGA_TARGET初始化参数,那么SGA管理的功能就是被禁用的,因此其初始化参数的含义与早期的版本不同,但是,当启用自动共享内存管理功能时,给被管理的SGA组件设置值,那么这个值是被认为是该参数的下限,可以动态修改相应的参数值
修改手动调整大小的参数
    手动调整大小的参数也可以是动态的修改,但不是指定的最小值,而是精确值。

手工共享内存管理
    如果你决定不使用自动共享内存管理,那么你必须手动配置SGA的每个组件,这节提供了关于手动调整那些控制每个SGA组件大小的初始化参数。
设置缓冲区高速缓冲初始化参数
    缓冲区告诉缓冲初始化决定了缓冲区高速缓冲SGA内存组件的大小,你可以用他们来指定不同数据块大小的缓冲数,是动态初始化参数。如果你打算在数据库中使用多种块大小,你必须设置DB_CACHE_SIZE初始化参数和一个至少一个DB_nK_CACHE_SIZE初始化参数,ORACLE数据库分配一个合适的默认值给B_CACHE_SIZE,但是DB_nK_CACHE_SIZE的默认值为0,并且没有额外的高速缓冲被分配,缓冲区的大小影响性能,更大的缓冲大小将减少对磁盘的读写数,需要更多的内存,减少内存分页和交换。
DB_CACHE_SIZE 初始化参数

     DB_CACHE_SIZE 初始化参数取代了DB_BLOCK_BUFFERS 初始化参数,DB_BLOCK_BUFFERS 使用于早期的版本中,DB_CACHE_SIZE参数以字节单位指定标准块大小的缓冲区高速缓冲的大小,因此,给DB_CACHE_SIZE指定一个值,您将确定的数目缓冲器,您需要和多重价值倍的块大小指定DB_BLOCK_SIZE 。
     为了兼容早期版本的数据库,您将确定的数目缓冲器,您需要和多重价值倍的块大小指定DB_BLOCK_BUFFERS参数任然可以使用,但是它保留一个静态的参数,并且不能与其他动态大小调整的参数组合使用。

指定共享池大小
      SHARED_POOL_SIZE 初始化参数是一个动态参数使你能够指定或者调整SGA组件的共享池大小,ORACLE数据库
选择一个合适的默认值。

指定大型池大小
      LARGE_POOL_SIZE 初始化参数是一个动态参数使你能够指定或调整SGA组件的大型池大小. 大型池是一个可选的SGA组件.如果你想创建大型池,你必须指定LARGE_POOL_SIZE 初始化参数
指定JAVA大小
      JAVA_POOL_SIZE 初始化参数是一个动态参数使你能够指定或调整SGA组件的Java池大小.
指定流池大小
     STREAMS_POOL_SIZE 初始化参数是一个动态参数使你能够指定或调整SGA组件的流池的大小.如果STREAMS_POOL_SIZE被设置为0,那么Oracle流产品 将使用共享池来满足SGA内存的需求.

对SGA参数的查询

   
     
视图                                               描述

V$SGA                                                          显示关于SGA的摘要信息.
V$SGAINFO                                                显示关于SGA的大小信息,包括不同SGA组件的大小信息,内存颗粒大小,和自由内存空间.
V$SGASTAT                                                显示SGA的详细信息.
V$SGA_DYNAMIC_COMPONENTS       显示SGA组件的信息.此视图摘要了从实例启动以来所有SGA大小调整操作信息.
V$SGA_DYNAMIC_FREE_MEMORY     显示为将来调整SGA大小可用的自由内存空间.
V$SGA_RESIZE_OPS Displays                   关于最近400条碗橱大额SGA大小调整操作的信息.
V$SGA_CURRENT_RESIZE_OPS               显示当前进行中的关于SGA大小调整的操作信息.一个调整操作是SGA组件的动态增大或减小.

原创粉丝点击