Oracle 10g SGA 的自動化管理

lpwebnet發表於2013-11-27

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

--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

    */

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17172228/viewspace-1061201/,如需轉載,請註明出處,否則將追究法律責任。

相關文章