Oracle 10g SGA 的自动化管理

时间:2023-01-07 03:58:32

--==============================

--Oracle 10g SGA 的自动化管理

--==============================

/*

    SGA中每一个单独的组件究竟需要多少内存呢?在Oracle 10g 中可以自动化管理大多数SGA参数。

 

一、什么是SGA

    简言之,系统全局区(SGA)仅仅是在Oracle实例启动时的共享内存结构,提供了实例和控制它行为的一些信息。下面

的表中给出了关于SGA一些特定组件的概要,控制内存大小分配的可变参数,以及这些特定的组件将影响Oracle server

哪些范围,并给出了一个简短的描述。从这个简短的列表中我们可以发现,在没有彻底地理解我们的应用程序后台的工

作状况下,以我们能力去推断并给这些组件中每一个设定内存的大小并不总是最优的选择,因为有大量的选项可供选择。

我们并不希望发生浪费可用内存的情况。

   

二、SGA组件

--组件列表使用原使文档,未翻译

 

SGA COMPONENT

SIZE CONTROLED BY

AREAS OF INFLUENCE

SIMPLE DESCRIPTONS

Shared Pool

SHARED_POOL_SIZE

Library Cache

·  Shared SQL areas

·  Private SQL areas

·  PL/SQL procedures and packages

·  Various control structures

Oracle needs to allocate & deallocate memory as SQL or procedural code is executed based on the individual needs of users' sessions and in accordance to the LRU algorithm.

Dictionary Cache

·  Row cache

·  Library cache

Highly accessed memory structures that provide information on object structures to SQL statements being parsed.

Java Pool

JAVA_POOL_SIZE

·  Run state

·  Methods

·  Classes

·  Session code

·  Data in JVM

Memory available for the Java memory manager to use for all things Java.

Streams Pool

STREAMS_POOL_SIZE

·  Stream activity

New to Oracle 10g, memory available for stream processing.

Redo Log Buffer

LOG_BUFFER

·  Redo entries

Holds changes made to data and allows for the reconstruction of data in the case of failure.

Database Buffer Cache

DB_2K_CACHE_SIZE

DB_4K_CACHE_SIZE

DB_8K_CACHE_SIZE

DB_16K_CACHE_SIZE

DB_32K_CACHE_SIZE

DB_KEEP_CACHE_SIZE

DB_RECYCLE_CACHE_SIZE

·  Write list

·  LRU list

Holds copies of data requested by SQL and reduces requests to disk by having data in memory. You may have many different buffer caches that help segregate on usage patterns.

Large Pool

LARGE_POOL_SIZE

·  Shared server

·  Oracle XA

·  I/O server processes

·  Backup & restore

For large memory allocations.

          

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

             

 

你可以通过初始化参数查看并控制SGA的大小   。下面是一个查询并提供了输出结果。 */

    select name, value

    from v$parameter

    where name in ('shared_pool_size', 'java_pool_size', 'streams_pool_size',

     'log_buffer', 'db_cache_size', 'db_2k_cache_size', 'db_4k_cache_size',

     'db_8k_cache_size', 'db_16k_cache_size', 'db_32k_cache_size',

     'db_keep_cache_size', 'db_recycle_cache_size', 'large_pool_size');

     

    NAME                      VALUE

    ------------------------- ---------

    shared_pool_size          83886080

    large_pool_size           8388608

    java_pool_size            50331648

    streams_pool_size         54525952

    db_cache_size             25165824

    db_2k_cache_size          0

    db_4k_cache_size          0

    db_8k_cache_size          0

    db_16k_cache_size         0

    db_32k_cache_size         0

    db_keep_cache_size        0

    db_recycle_cache_size     0

    log_buffer                262144

 

    13 rows selected.

/*

 

三、使用Oracle自动化SGA的管理

    使用Oracle 自动共享内存优化,通过设定一个新的SGA_TARGET 参数,即仅仅是告诉Oralce实例SGA目标大小是多少,

    Oracle将自动管理一系列SGA的组件。Oracle在你所选的组件中将集中管理,动态分配你设定的SGA_TARGET值。即不再

    需要人为的为SHARED_POOL_SIZE, JAVA_POOL_SIZE, LARGE_POOL_SIZE, DB_CACHE_SIZE 设定值,Oracle将会自动对

    其分配合适的大小。一旦你为SGA_TARGET设定了你所需要的值,上述的这些值将呈现为,并且新的参数将被创建并指派

      __SHARED_POOL_SIZE, __JAVA_POOL_SIZE, LARGE_POOL_SIZE, and __DB_CACHE_SIZE.在这些区域,Oracle将根据系

    统和内存所需的工作负荷,基于内部统计信息来分配更多的内存。Oracle将不再管理DB_KEEP_CACHE_SIZE,

    DB_RECYCLE_CACHE_SIZE, DBnK_CACHE_SIZE, the STREAMS_POOL_SIZE ,但是你依然可以决定这些参数的值。这些

    设置仅仅能通过使用SPFILEOracle将动态的使得这些行为再次产生。注意,SGA_TARGET值的大小是所有组成SGA组件的

    大小之和。当指定一个SGA_TARGET值时,不仅仅是参数控制,应该考虑所有的这些组件将不再被控制。

   

四、设置Oracle SGA 自动控制功能

    1.查看你的系统是否已经使用了SGA自动控制 */

   

       SQL> show parameter sga_target

       NAME                                 TYPE        VALUE

       ------------------------------------ ----------- --------

       sga_target                           big integer 0

      

       /*

      

    2.修改SGA自动控制的大小*/

        SQL> alter system set sga_target=216m;

       System altered.

       /*

      

      

    3.完成切换

        当切换到自动共享内存优化后,一个有趣的事情是你的SPFILE 将发生变化,并且有下列参数被定义,不论你的实例名

       是什么,注意k101是我的实例名。*/

        k101.__db_cache_size=25165824

       k101.__java_pool_size=50331648

       k101.__large_pool_size=8388608

       k101.__shared_pool_size=83886080

      

       /*

      

       除此之外,你可以使用前面使用过的SQL语句去查看SGA的这些设置,现在他们有一个零值。*/

      

       select name, value

       from v$parameter

       where name in ('shared_pool_size', 'java_pool_size', 'streams_pool_size',

        'log_buffer', 'db_cache_size', 'db_2k_cache_size', 'db_4k_cache_size',

        'db_8k_cache_size', 'db_16k_cache_size', 'db_32k_cache_size',

        'db_keep_cache_size', 'db_recycle_cache_size', 'large_pool_size');

        

       NAME                      VALUE

       ------------------------- ---------

       shared_pool_size          0

       large_pool_size           0

       java_pool_size            0

       streams_pool_size         0

       db_cache_size             0

       db_2k_cache_size          0

       db_4k_cache_size          0

       db_8k_cache_size          0

       db_16k_cache_size         0

       db_32k_cache_size         0

       db_keep_cache_size        0

       db_recycle_cache_size     0

       log_buffer                262144

       13 rows selected.

 

    --当设定了SGA_TARGET 后,可以修改查询语句使用新创建的带有下划线的参数变量作为查询条件。

   

   

       select name, value

       from v$parameter

       where name in ('__shared_pool_size', '__java_pool_size',

        'streams_pool_size', 'log_buffer', '__db_cache_size', 'db_2k_cache_size',

        'db_4k_cache_size', 'db_8k_cache_size', 'db_16k_cache_size',

        'db_32k_cache_size', 'db_keep_cache_size', 'db_recycle_cache_size',

        '__large_pool_size');

 

       NAME                      VALUE

       ------------------------- ---------

       __shared_pool_size        67108864

       __large_pool_size         4194304

       __java_pool_size          8388608

       streams_pool_size         0

       __db_cache_size           142606336

       db_2k_cache_size          0

       db_4k_cache_size          0

       db_8k_cache_size          0

       db_16k_cache_size         0

       db_32k_cache_size         0

       db_keep_cache_size        0

       db_recycle_cache_size     0

       log_buffer                262144

    /*

   

    切换到自动共享内存优化非常容易,仅仅是设定一个初始化参数。基于负载的情况下,这个管理方式该是确定的,尽管有不同的建议

    这些数量应当被如何分配。我更乐于使用他们作为一个单独的组件。没有理由不去规避风险来使用自动共享内存优化。当然,我会先

    在测试的环境中来使用它。我也建议在使用自动共享内存优化之前,做一个初始化参数快照然后比较使用动共享内存优化。这样也很

    容易切换回去,仅仅是重新设置SGA_TARGET,然后再单独设置各个组件到原来的值即可。 */

 

五、原文出处:

    September 2, 2004

    Automate the Sizing of your SGA in Oracle 10g

    By James Koopmann

http://www.databasejournal.com/features/oracle/article.php/10893_3400301_1/Automate-the-Sizing-of-your-SGA-in-Oracle-10g.htm

    */

/*   

       

六、更多:*/

 

    SQL/PLSQL 基础

 

    Oralce 10g 使用DBCA创建数据库

 

    使用Uniread实现SQLplus翻页功能

 

    Linux (RHEL 5.4)下安装Oracle 10g R2

 

    VmWare6.5.2下安装RHEL 5.4(配置Oracle安装环境)

 

    Oracle相关

 

    Oracle实例和Oracle数据库(Oracle体系结构)