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

首頁 > 數據庫 > Oracle > 正文

Oracle內存結構(一)----SGA的區域信息

2024-08-29 13:31:29
字體:
來源:轉載
供稿:網友

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
注冊會員,創建你的web開發資料庫,
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 沈丘县| 襄樊市| 敦化市| 安多县| 油尖旺区| 海伦市| 漾濞| 保定市| 邵阳县| 深州市| 前郭尔| 治县。| 天津市| 西城区| 镇赉县| 策勒县| 康乐县| 噶尔县| 湄潭县| 闽侯县| 犍为县| 赤城县| 舟曲县| 肥城市| 中西区| 武义县| 澄城县| 宜兰县| 唐河县| 饶阳县| 镶黄旗| 故城县| 贺兰县| 梁河县| 金沙县| 东辽县| 黑龙江省| 苍溪县| 葫芦岛市| 麻栗坡县| 苍山县|