<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    cAng^Er

    不懂我的人 , 離不了我 , 該了解了解我 !而懂我的人 , 更離不了我 , 因為他們愛我 。

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      30 隨筆 :: 16 文章 :: 18 評論 :: 0 Trackbacks
    原文:http://blog.csdn.net/hxf0759/archive/2009/04/09/4060493.aspx

    SGA——Oracle的系統全局空間
    SGA——數據高速緩存池(DB Buffer)
      |                             |—————————默認緩存池
      |                             |—————————保持緩存池
      |                             |—————————再生緩存池
      |
      |———共享緩存池
      |               |————————庫緩存區
      |               |                             |——————共享SQL區(已編譯的SQL)
      |               |                             |——————PL/SQL區(過程、函數等..)
      |               |
      |               |————————數據字典緩存區(常用的表名、列名等用于解析SQL語句的內容)
      |
      |———Redo日志緩存區
      |———大共享區(可選的特征)
      |———固定SGA


    內存結構與動態內存管理
     

    內存是影響數據庫性能的重要因素。
      oracle8i使用靜態內存管理,即,SGA內是預先在參數中配置好的,數據庫啟動時就按這些配置來進行內在分配,oracle10g引入了動態內存管理,即在數據庫運行過程中,內存大小可以在線修改與自動配置。
      oracle數據庫的內存可以分為:系統全局區、程序全局區、排序區、大池、java池。

    一、系統全局區(SGA)

      系統全局區的數據被多個用戶共享。當數據庫實例啟動時,系統全局區內存被自動分配。SGA按作用的不同,又分為:數據緩沖區、日志緩沖區、共享池。

    1.數據緩沖區
      數據緩沖區用于存儲從磁盤數據文件中讀入的數據,供所有用戶共享。修改、插入的數據存儲在數據緩沖區中,修改完成或DBWR進程執行時,數據被寫入數據文件。

      幾個概念:
    LRU:最近最少使用,系統按這個原則對緩沖區中的數據進行替換。
    Dirty:臟數據,指修改后還沒有寫到數據文件中的數據。

      在9i之前,數據緩沖區的大小是由DB_BLOCK_BUFFER確定,之后的版本中,是由參數DB_CACHE_SIZE及DB_nK_CACHE_SIZE確定。不同的表空間可以使用不同的塊大小,在創建表空間中加入參數BLOCKSIZE指定該表空間數據塊的大小,如果指定的是2k,則對應的緩沖區大小為DB_2K_CACHE_SIZE參數的值,如果指定的是4k,則對應的緩沖區大小為DB_4K_CACHE_SIZE參數的值,以此類推。如果不指定BLOCKSIZE,則默認為參數DB_BLOCK_SIZE的值,對應的緩沖區大小是DB_CACHE_SIZE的值。

      緩沖區的設置對性能影響是很突出的。設一個查詢要讀取的數據塊數為A,能夠從緩沖區讀取到的數據塊數為C,需要從磁盤讀取的數據塊數為D,那么A+C+D,則C/A稱為數據緩沖區的命中率。以下語句計算數據緩沖區的命中率:

    SQL>SELECT A.VALUE+B.VALUE "LOGICAL_READS",C.VALUE "PHYS_READS",
        ROUND(100*((A.VALUE+B.VALUE)-C.VALUE)/(A.VALUE+B.VALUE)) "BUFFER HIT RATIO"
        FROM V$SYSSTAT A,V$SYSSTAT C
        WHERE A.STATICSTIC#=38 AND B.STATISTIC#=39 AND C.STATICSTIC#=40
    一般要求命中率在90%以下,如果命中率太低,就應適當調整數據緩沖區的大小。
    2.日志緩沖區
      日志緩沖區用于緩沖事務日志,在適當的時候再由LGWR進程寫入日志文件。日志緩沖區的大小由參數LOG_BUGGER設定。


      日志在進入日志緩沖區時,如果日志緩沖區過小而沒有空閑空間,就要等待LGWR將緩沖區中原有的日志寫入日志文件以騰出空閑空間。如果有足夠的空閑空間,則無需等待,直接寫入日志緩沖區中。那么這個 等待的次數/總次數(等待+非等待) 就稱為日志緩沖區的失敗率,可以通過以下語句計算:
    sql>select name,gets,misses,immediate_get,immediate_misses,
        decode(gets,0,0,misses/gets*100 ratio1,
        decode(immediate_gets+immdiate_misses,0,0,immediate_misses/(immdiate_gets+immediate_misses)*100) ratio2
        from v$latch where name in ('redo allocation','redo copy');
      顯然,失敗率也是影響性能的重要因素,就要實際情況調整log_buffer的大小。

    3.共享池
      共享池是對sql,pl/sql程序進行語法分析,編譯,執行的內存區域。包括:庫緩沖區(library cache),數據字典緩沖區(data dictinary cache),用戶全局區(user global area)三個部分。


      共享池的大小由參數shared_pool_size設定。
      查詢數據字典的成功與失敗次數:
    sql>select sum(gets) "dictionary gets",
               sum(getmisses) "dictionary cache getmisses",
               from v$rowcache
       計算共享池記取數據字典的成功率:
    sql>select parameter,gets,getmisses,getmisses/(gets+getmisses)*100 "miss ratio",(1-sum(getmisses)/sum(gets)+sum(getmisses))))*100 "hit ratio" from v$rowcache where gets+getmisses<>0 group by parameter,gets,getmisses;
      計算緩存的失敗率,結果應小于1%:
    sql>select sum(pins) "total pins",sum(reloads) "total reloads",
               sum(reloads)/sum(pins)*100 libcahe from v$librarycache;

      以上分析了SGA的三個部分,要查看SGA的總大小或空閑空間,使用比率,如下:
    sql>select * from v$sga
    sql>select name,sgasize/1024/1024 "allocated(m)",bytes/1024 "空閑空間百分比(%)" from (select sum(bytes) sgasize from sys.v_$sgastat) s,sys.v_sgastat f where f.name='free mamory';

    二、程序全局區


      程序全局區(PGA)是包含單個用戶或服務器數據的控制信息的內存區域。是在用戶進程連接到oracle數據庫并創建一個會話時,由oracle自動分配的,它是非共享區,主要用于在編程時存儲變量與數組。會話結束時,PGA被釋放。

    三、排序區


      排序區用于sql的order by。oracle優先使用排序區進行排序,如果內存不夠,oracle自動使用臨時表空間進行排序。
      參數sort_area_size用于設置排序區的大小。

    四、大池


      大池用于數據庫備份工具-RMAN。
      大池的大小由參數large_pool_size確定。

    五、java池


      從8i開始,oracle增加了對java的支持,所以系統提供了java池,其大小由參數java_pool_size設定。

    六、oracle10g的自動共享內存管理


    1.什么是自動共享內存管理?
      在10g以前的版本中,SGA的各個部分,share_pool_size,db_cache_size等需要由管理員手動設置大小,當數據庫負荷太大時,若沒有調整這些參數的大小,就會產生“無法分配內存”的錯誤。在10g中,將參數statistics_level設置為typecal 或all,再使用新參數SGA_TARGET設置SGA內存區的部大小即可,無需定義每個參數的大小,系統會根據需要自動在多個組件之間分配內存大小。

    2.自動共享內存管理時,設置SGA各部分內存參數的最小值限制
      如果同時設置了SGA_TARGET和各內存參數,如:
    SGA_TARGET=300M
    SHARED_POOL_SIZE=32M
    DB_CACHE_SIZE=90M
    則表示共享池和數據緩沖區至少會分配32M和90M內存,剩下的可由系統自動分配的內存為:
    300-32-90=172M

    3.手動內存管理轉換為自動管理
      只要設置新參數SGA_TARGET即可,如:
    SGA_TARGET=1000M
       在自動內存管理模式下,如果數據庫使用SPFILE,那么在數據庫關閉后,系統會將上一次數據庫關閉時的內存分配狀態記錄下來。因此,如果是自動內存管理,最好使用SPFILE而非PFILE。

     

    本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/hxf0759/archive/2009/04/09/4060493.aspx

    posted on 2011-02-23 10:34 cAng^Er 閱讀(119) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 99免费观看视频| 日韩大片免费观看视频播放| 久久久无码精品亚洲日韩京东传媒| 亚洲无码在线播放| 久久99国产亚洲高清观看首页 | 久久久久久久99精品免费| 最近免费中文字幕MV在线视频3 | h片在线观看免费| 国产免费一区二区三区免费视频 | 亚洲精品第一综合99久久| 亚洲精品无码专区久久| 色九月亚洲综合网| 一区二区三区免费视频观看| 国产精品福利在线观看免费不卡| 黄 色一级 成 人网站免费| 国产无遮挡又黄又爽免费网站 | 亚洲爆乳精品无码一区二区| 亚洲AV日韩AV无码污污网站| 免费的黄色网页在线免费观看| 成人免费观看男女羞羞视频| 热久久这里是精品6免费观看| 一个人免费视频观看在线www| 三年片在线观看免费观看大全一 | a级毛片免费完整视频| 99久久精品国产免费| 免费大片黄在线观看yw| 国产美女精品久久久久久久免费 | 成人浮力影院免费看| 国外成人免费高清激情视频| 无码欧精品亚洲日韩一区夜夜嗨 | 亚洲av日韩综合一区二区三区| 最好2018中文免费视频| 两个人看的www免费| 亚洲一区二区免费视频| 精品久久久久久久免费人妻| 爱情岛论坛网亚洲品质自拍| 亚洲视频在线观看| 亚洲av永久无码| 少妇性饥渴无码A区免费 | 亚洲国产精品狼友中文久久久 | 亚洲精品无码久久久|