Oracle體繫結構及備份(五)——sga

來源:互聯網
上載者:User
文章目錄
  • 二 記憶體管理方式
  • 三 SGA的分配
  • 四 操作樣本
  • 五 總結
一 什麼是SGA(參考 Oracle記憶體結構--SGA)

 

        SGA是一組為系統分配的共用的記憶體結構,可以包含一個資料庫執行個體的資料或控制資訊。如果多個使用者串連到同一個資料庫執行個體,在執行個體的SGA中,資料可以被多個使用者共用。當資料庫執行個體啟動時,SGA的記憶體被自動分配;當資料庫執行個體關閉時,SGA記憶體被回收。 SGA是佔用記憶體最大的一個地區,同時也是影響資料庫效能的重要因素。

 

 

 

        SGA區是可讀寫的。所有登入到執行個體的使用者都能讀取SGA中的資訊,而在oracle做執行操作時,服務進程會將修改的資訊寫入SGA區。

 

        SGA主要包括了以下的資料結構:

 

        資料緩衝(Buffer Cache)

 

        重做日誌緩衝(Redo Log Buffer)

 

        共用池(Shared Pool)

 

        Java池(Java Pool)

 

        大池(Large Pool)

 

        流池(Streams Pool --- 10g以後才有)

 

        資料字典緩衝(Data Dictionary Cache)

 

        其他資訊(如資料庫和執行個體的狀態資訊)

 

        The SGA is the Oracle structure that is located in shared memory. It contains static data structures, locks, and data buffers. Sufficient shared memory must be available to each Oracle process to address the entire SGA.

 

        The maximum size of a single shared memory segment is specified by the shmmax kernel parameter.

 

        The following table shows the recommended value for this parameter, depending on the platform:

 

 

        If the size of the SGA exceeds the maximum size of a shared memory segment (shmmax or shm_max), then Oracle Database attempts to attach more contiguous segments to fulfill the requested SGA size. The shmseg kernel parameter specifies the maximum number of segments that can be attached by any process. Set the following initialization parameters to control the size of the SGA:

 

        DB_CACHE_SIZE

 

        DB_BLOCK_SIZE

 

        JAVA_POOL_SIZE

 

        LARGE_POOL_SIZE

 

        LOG_BUFFERS

 

        SHARED_POOL_SIZE

 

        Alternatively, set the SGA_TARGET initialization parameter to enable automatic tuning of the SGA size.

 

        Use caution when setting values for these parameters. When values are set too high, too much of the physical memory is devoted to shared memory. This results in poor performance.

 

        An Oracle Database configured with Shared Server requires a higher setting for the SHARED_POOL_SIZE initialization parameter, or a custom configuration that uses the LARGE_POOL_SIZE initialization parameter. If you installed the database with Oracle Universal Installer, then the value of the SHARED_POOL_SIZE parameter is set automatically by Oracle Database Configuration Assistant. However, if you created a database manually, then increase the value of the SHARED_POOL_SIZE parameter in the parameter file by 1 KB for each concurrent user.

 

 

二 記憶體管理方式

 

        Oracle 8i:手動 PGA管理

        Oracle 9i:自動PGA記憶體管理、手工共用記憶體管理

        Oracle 10g:自動共用記憶體管理

        Oracle 11g:自動記憶體管理

 

三 SGA的分配

 

        SGA的管理又三種方式

        8i:SGA的總大小由所有記憶體組件大小之和決定,不能直接定義SGA大小。對內部組件大小的修改必須在資料庫重啟後才會生效,所以叫SGA的靜態管理。

 

        9i:SGA總大小由初始化參數SGA_MAX_SIZE確定,各個記憶體最賤大小之和不能超過這個參數,在這個大小之下,SGA各個記憶體組件可以在不重啟資料庫的情況下直接修改大小,所以叫做SGA的動態管理。

 

        10g:SGA大小既可以像9i一樣動態管理,也可以實施SGA的自動管理,只需要設定初始化參數SGA_TARGET,SGA各個記憶體組件就可以由資料庫自動化佈建大小,設定的資料來源於系統自動收集的統計資訊。在9i以後,SGA的內部組件大小可以動態調整,也可以由資料庫自動管理,在設定記憶體大小的時候,分配的基本單位是粒度(granule).Granule是一段連續的虛擬記憶體,大小取決於SGA_MAX_SIZE的大小,如果SGA_MAX_SIZE小於128M,Granule為4M,否則Granule為16M。各個記憶體組件分配大小必須是Granule的整倍數。整個SGA最小不小於3個Granule大小。

 

        9i中的規則如下

        Linux/Unix

        SGA <= 128M granule 4M

        SGA > 128M granule 16M

 

        Windows

        SGA <= 128M granule 4M

        SGA > 128M granule 8M

 

        10G中的分配規則為

        Linux/Unix/Windows

        SGA <= 1G granule為4M,否則為16M

 

        SGA的各個組件大小是可以動態調整的,總大小不超過參數SGA_MAX_SIZE或者SGA_TARGET的大小。

 

四 操作樣本

 

SQL> SELECT name, bytes/1024/1024 MB, resizeable from v$sgainfo;NAME MB RES-------------------------------- ---------- ---Granule Size  4 No-------------------------------- ---------- ---SQL> show parameter sga_max_size;NAME     TYPE VALUE------------------------------------ ----------- ------------------------------sga_max_size     big integer 160MSQL> ALTER SYSTEM SET sga_max_size=1025m scope=spfile;System altered.SQL> startup force;ORACLE instance started.Total System Global Area 1090519040 bytesFixed Size    1218944 bytesVariable Size 1056966272 bytesDatabase Buffers   16777216 bytesRedo Buffers   15556608 bytesDatabase mounted.Database opened.SQL> show parameter sga_max_size;NAME     TYPE VALUE------------------------------------ ----------- ------------------------------sga_max_size     big integer 1040M--因各個記憶體組件分配大小必須是Granule的整倍數,右1025隔1040最近,所以此處為1040M。SQL> SELECT name, bytes/1024/1024 MB, resizeable from v$sgainfo;NAME MB RES-------------------------------- ---------- ---Granule Size 16 No-------------------------------- ---------- ---SQL> desc v$sgainfo; Name   Null?    Type ----------------------------------------- -------- ---------------------------- NAME    VARCHAR2(32) BYTES    NUMBER RESIZEABLE    VARCHAR2(3)SQL> select * from v$sgainfo;NAME      BYTES RES-------------------------------- ---------- ---Fixed SGA Size    1218316 NoRedo Buffers    2973696 NoBuffer Cache Size   92274688 YesShared Pool Size   62914560 YesLarge Pool Size     4194304 YesJava Pool Size    4194304 YesStreams Pool Size  0 YesGranule Size    4194304 NoMaximum SGA Size  167772160 NoStartup overhead in Shared Pool    37748736 NoFree SGA Memory Available  011 rows selected.SQL> SELECT name, bytes/1024/1024 MB, resizeable from v$sgainfo;NAME MB RES-------------------------------- ---------- ---Fixed SGA Size 1.16187668 NoRedo Buffers  2.8359375 NoBuffer Cache Size 88 YesShared Pool Size 60 YesLarge Pool Size   4 YesJava Pool Size  4 YesStreams Pool Size  0 YesGranule Size  4 NoMaximum SGA Size160 NoStartup overhead in Shared Pool  36 NoFree SGA Memory Available  011 rows selected.SQL> show parameter sga_max_size;NAME     TYPE VALUE------------------------------------ ----------- ------------------------------sga_max_size     big integer 160MSQL> ALTER SYSTEM SET sga_max_size=1025m scope=spfile;System altered.SQL> startup force;ORACLE instance started.Total System Global Area 1090519040 bytesFixed Size    1218944 bytesVariable Size 1056966272 bytesDatabase Buffers   16777216 bytesRedo Buffers   15556608 bytesDatabase mounted.Database opened.SQL> show parameter sga_max_size;NAME     TYPE VALUE------------------------------------ ----------- ------------------------------sga_max_size     big integer 1040MSQL> SELECT name, bytes/1024/1024 MB, resizeable from v$sgainfo;NAME MB RES-------------------------------- ---------- ---Fixed SGA Size 1.16247559 NoRedo Buffers 14.8359375 NoBuffer Cache Size 16 YesShared Pool Size 96 YesLarge Pool Size  16 YesJava Pool Size 16 YesStreams Pool Size  0 YesGranule Size 16 NoMaximum SGA Size       1040 NoStartup overhead in Shared Pool  32 NoFree SGA Memory Available88011 rows selected.SQL> show parameter shared_p;NAME     TYPE VALUE------------------------------------ ----------- ------------------------------shared_pool_reserved_size     big integer 4Mshared_pool_size     big integer 0SQL> ALTER SYSTEM SET shared_pool_size=10m;System altered.SQL> ALTER SYSTEM SET sga_max_size=800m scope=spfile;                   System altered.SQL> startup force;ORACLE instance started.Total System Global Area  838860800 bytesFixed Size    1222192 bytesVariable Size  734005712 bytesDatabase Buffers  100663296 bytesRedo Buffers    2969600 bytesDatabase mounted.Database opened.SQL> ALTER SYSTEM set shared_pool_size=10m;System altered.SQL> show parameter shared_p;NAME     TYPE VALUE------------------------------------ ----------- ------------------------------shared_pool_reserved_size     big integer 838860shared_pool_size     big integer 12MSQL> show parameter sga_max_size;NAME     TYPE VALUE------------------------------------ ----------- ------------------------------sga_max_size     big integer 800MSQL> show parameter sga_target;NAME     TYPE VALUE------------------------------------ ----------- ------------------------------sga_target     big integer 160MSQL> show parameter shared_pool_size;NAME     TYPE VALUE------------------------------------ ----------- ------------------------------shared_pool_size     big integer 12MSQL> show parameter large_pool_size;NAME     TYPE VALUE------------------------------------ ----------- ------------------------------large_pool_size      big integer 0SQL> show parameter java_pool_size;NAME     TYPE VALUE------------------------------------ ----------- ------------------------------java_pool_size     big integer 0SQL> show parameter streams_pool_size; NAME     TYPE VALUE------------------------------------ ----------- ------------------------------streams_pool_size     big integer 0SQL> show parameter db_cache_size;NAME     TYPE VALUE------------------------------------ ----------- ------------------------------db_cache_size     big integer 0SQL> show parameter sga_target;NAME     TYPE VALUE------------------------------------ ----------- ------------------------------sga_target     big integer 160MSQL>

 

 

五 總結

 

        1. SGA是一組為系統分配的共用的記憶體結構,可以包含一個資料庫執行個體的資料或控制資訊。

 

        2. SGA主要包括了以下的資料結構:資料緩衝(Buffer Cache)、重做日誌緩衝(Redo Log Buffer)、共用池(Shared Pool)、Java池(Java Pool)、大池(Large Pool)、流池(Streams Pool --- 10g以後才有)、資料字典緩衝(Data Dictionary Cache)、其他資訊(如資料庫和執行個體的狀態資訊);

 

        3.可以通過v$sgainfo視圖查看sga相關資訊。

 

我的郵箱:wgbno27@163.com  新浪微博:@Wentasy27  公眾平台:JustOracle(號:justoracle)  IT交流群:336882565(加群時驗證 From CSDN XXX)  Oracle交流討論群組:https://groups.google.com/d/forum/justoracle  By Larry Wen

 
@Wentasy 博文僅供參考,歡迎大家來訪。如有錯誤之處,希望批評指正。原創博文如需轉載請註明出處,謝謝 [CSDN部落格]
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.