<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)  編輯  收藏

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


    網站導航:
     
    主站蜘蛛池模板: 国产亚洲午夜精品| 亚洲αⅴ无码乱码在线观看性色 | 97公开免费视频| 亚洲精品tv久久久久久久久| 一级做a爰性色毛片免费| 亚洲男人在线无码视频| yellow视频免费在线观看| 国产亚洲精品影视在线产品| 一级A毛片免费观看久久精品 | 久久亚洲精品11p| 国产精品无码素人福利免费| 久久无码av亚洲精品色午夜 | 亚洲国产精品成人精品无码区| 成人免费无码H在线观看不卡| 国产亚洲真人做受在线观看| 无人在线观看免费高清| 亚洲精品**中文毛片| 在线观看视频免费完整版| 亚洲七久久之综合七久久| 免费中文字幕一级毛片| 国产一级在线免费观看| 91精品国产亚洲爽啪在线影院 | 国产卡一卡二卡三免费入口| 亚洲中文字幕久久精品无码VA| 国产成人精品免费视频大全五级| 免费福利在线观看| 水蜜桃亚洲一二三四在线| 青娱乐免费视频在线观看| 午夜亚洲乱码伦小说区69堂| 国产亚洲综合网曝门系列| 无码人妻一区二区三区免费| 免费人成视频在线播放| 亚洲天堂中文字幕| 免费激情视频网站| 久久免费视频网站| 亚洲色成人四虎在线观看| 亚洲香蕉成人AV网站在线观看| 黄页网站免费在线观看| fc2成年免费共享视频网站| 久久精品国产亚洲αv忘忧草| 亚洲精品456播放|