国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

Oracle內存結構:SGA的區域信息

2024-08-29 13:39:23
字體:
來源:轉載
供稿:網友
  SGA的區域信息  SGA(system global area)系統全局區跟一些必須的后臺進程合進來稱為實例(Instance)。說它是全局區是包含了全局變量和數據結構,是系統區是包含了進入整個Oracle Instance的數據結構而不是特定的進程結構。  SGA區域:   SGA大概包括下面四到五種區域:  The fixed area  The variable area  The database blocks area  The log buffer  The instance lock database(for parallel server instances)——OPS&RAC  根據內存的大小,我們可以把The fixed area和The log buffer設為很小。  The fixed area:  SGA中的The fixed area包含了數千個原子變量,以及如latches和指向SGA中其它區域的pointers(指針)等小的數據結構。通過對fixed table內表X$KSMFSV查詢(如下)可以獲得這些變量的名字,變量類型,大小和在內存中的地址。  SQL> select ksmfsnam, ksmfstyp, ksmfssiz, ksmfsadr  2> from x$ksmfsv;  這些SGA變量的名字是隱藏的而且幾乎完全不需要去知道。但是我們可以通過結合fixed table內表X$KSMMEM獲得這些變量的值或者檢查它們所指向的數據結構。  SQL>select a.ksmmmval from x$ksmmem a where addr=(select addr from x$ksmfsv where ksmfsnam=‘kcrfal_’);  SGA中的fixed area的每個組成部分的大小是固定的。也就是說它們是不依靠于其它的初始化參數的設置來進行調整的。fixed area中的所以組成部分的大小相加就是fixed area的大小。  The variable area:  SGA中的the variable area是由large pool和shared pool組成的。large pool的內存大小是動態分配的,而shared pool的內存大小即包含了動態治理的內存又包含了永久性的(已經分配的)內存。實際上,初始化參數shared_pool_size的大小設置是指定shared pool中動態分配的那部分內存的一個大概的SIZES而不是整個shared pool的SIZES  Shared pool中永久性的內存包含各種數據結構如:the buffer headers, PRocesses, sessions, transaction arrays, the enqueue resources , locks, the online rollback segment arrays, various arrays for recording statistics.其中大部分的SIZE是依靠初始參數的設置來確定的。這些初始參數只能在實例被關閉的狀態下才能夠進行修改。所以這里說的永久性是針對實例打開狀態下的生存期而言。簡單的一個例子PROCESSES參數。在這個process arrays中的slots用完之后,假如有其它的process想再申請一個process則會失敗,因為它們在內存中的大小是在實例啟動時預分配的。不能動態修改之。  針對很多永久性的arrays,有很多的X$表都把這些元素做一個記錄而成員結構則作為字段。V$視圖的數據就是從這些X$表獲得。如V$PROCESS是基于X$KSUPR內表的。V$PROCESS視圖不包含X$KSUPR的全部字段。 X$KSUPR也沒有覆蓋SGA進程結構的所有成員。  The variable area的在SGA中的SIZES就等于LARGE_POOL_SIZE,SHARED_POOL_SIZE和永久性的內存arrays的SIZE三者相加。 永久性的內存arrays的總的SIZE可以通過初始參數的設置來計算得到。然而,你需要知道從參數獲得這些array sizes的方程式,每個array元素大小的字節數,還有array頭信息的sizes.這些跟Oracle的版本號和OS有關。實際使用中,我們是不必要計算這個永久性的內存arrays的SIZE的。假如想知道,一個方法就是在STARTUP NOMOUNT數據庫時記下the variable area.然后減去參數中LARGE_POOL_SIZE和SHARED_POOL_SIZE的大小就可以。  The database block area:  這個區域是數據庫塊的拷貝。在Oracle 8i中,buffer數由DB_BLOCK_BUFFERS指定。每個buffer的大小由DB_BLOCK_SIZE指定。所以這個區域的大小是兩者相乘。在Oracle 9i中,這個區域的大小是DB_CACHE_SIZE指定。這個區不包含它們自己的控制結構,只包含database block copies data.每個buffer的header信息存在于SGA的the variable area中。還有latches信息也放在SGA的the variable area中。在設置DB_BLOCK_BUFFERS時每4個BUFFERS會影響the variable area的1K的SIZE.關于這一點。可以通過測試(針對8i而言)。  The log buffer:  這個區域的SIZE是由參數LOG_BUFFER指定的。假如OS支持內存保護,log buffer將會被兩個保護頁面包圍起來以免被一些ORACLE的錯誤進程損壞log buffer.在SGA中,跟其它的如variable area和database block area相比,log buffer是非常小的。log buffer分成內部的buffer blocks,而這些block各有8個字節的頭部信息存在于variable area中。
  The instance lock database  在OPS/RAC配置中,instance locks用來控制由所有instances共享的資源以串行的方式被進入并使用。SGA中的這個區域所維護的是本地實例所要使用的數據庫資源,所有實例和進程都會用到的數據庫資源,還有所有實例和進程當前需要的或者已經擁有的鎖(LOCKS)。這三個arrays的SIZE分別由參數LM_RESS,LM_PROCS,LM_LOCKS參數指定。(這三個參數是RAC的參數,在單實例中用SHOW PARAMETER是查看不到的)。 The instance lock database還包含了message buffers和其它的strUCture.但是其SIZE是非常小的。  這個區域的SIZE是沒辦法在實例啟動的時候看到的。這是Oracle Internals.可以用ORADEBUG工具查看。SQL>ORADEBUG ipC.至于ORADEBUG工具就不做介紹。用這個工具做操作時需要經過Oracle Support同意。  可以用以下的兩種方式DUMP SGA:  SQL>ALTER SESSION SET EVENTS 'immediate trace name global_area level 2';  或者SQL>ORADEBUG DUMP GLOBAL_AREA 2

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宜兰县| 绥化市| 昔阳县| 年辖:市辖区| 铁岭县| 宝兴县| 弥勒县| 陆丰市| 黎川县| 鄂托克旗| 永年县| 秭归县| 丰原市| 阿拉善右旗| 都安| 白水县| 同心县| 读书| 太仓市| 洛宁县| 兖州市| 建平县| 宜君县| 绥宁县| 敦化市| 纳雍县| 方山县| 汾西县| 颍上县| 抚远县| 池州市| 泸州市| 东城区| 乌拉特前旗| 宜宾县| 蕲春县| 通化市| 那坡县| 布尔津县| 射洪县| 宣化县|